sql >> データベース >  >> RDS >> Sqlserver

出退勤時間の SQL クエリ

    これを試してください:

    ;with cte as
    (select *, rank() over(partition by ID_Emp order by [Date]) rn
     from attendance)
    
    select src.ID_Emp, src.Name, convert(date, src.[Date]) as [Date],
    concat(datepart(hour,src.[Date]),':',datepart(minute,src.[Date])) as [TimeIn],
    concat(datepart(hour,tgt.[Date]),':',datepart(minute,tgt.[Date])) as [TimeOut],
    concat(datediff(minute,src.[Date],tgt.[Date])/60,':',datediff(minute,src.[Date],tgt. [Date])%60) as [Hours]
    from cte src
    inner join cte tgt on src.ID_Emp = tgt.ID_Emp and src.rn + 1 = tgt.rn and src.rn % 2 = 1
    

    警告:これは SQL Server 2008 R2 でのみテストしましたが、適切な変更を加えれば Oracle でも動作するはずです。

    説明:RANK を使用します 各 ID_Emp の日付と時刻で並べ替える関数 .次に、ID で参加します 行のペアを取得します。最後に、連続する行のすべてのペアを選択しないようにするために、ソース行のランクが奇数であることを要件としています。



    1. MySqli:データベースを作成することは可能ですか?

    2. クエリLaravelから反対の結果を取得する方法

    3. データベースへの重複エントリを防止します

    4. カタログ、スキーマ、ユーザー、およびデータベースインスタンス間の関係