Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Query untuk waktu Masuk/Keluar kehadiran

Coba ini:

;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

Peringatan:Saya telah menguji ini hanya pada SQL Server 2008 R2, tetapi saya menganggap ini harus bekerja pada Oracle juga dengan modifikasi yang sesuai.

Penjelasan:Kami menggunakan RANK berfungsi untuk memesan berdasarkan tanggal dan waktu untuk setiap ID_Emp . Kemudian, kita bergabung di ID dan dapatkan pasangan baris. Terakhir, untuk memastikan bahwa kami tidak memilih setiap pasangan baris berurutan, kami membuat persyaratan bahwa peringkat baris sumber harus ganjil.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ada cara untuk mengulang variabel tabel di TSQL tanpa menggunakan kursor?

  2. Bagaimana cara memanggil prosedur tersimpan dengan argumen menggunakan sqlcmd.exe?

  3. Sintaks kueri pembaruan SQL dengan gabungan dalam

  4. Cara Mengganti String jika record NULL di T-SQL

  5. Apa yang setara dengan bigint di C#?