首页 > 解决方案 > SQL 查询 TA BioStar

问题描述

我有显示 TA 值的查询,结果将显示如下

SELECT convert(varchar(10),DATEADD(second, dbo.TB_EVENT_LOG.nDateTime, '19700101 00:00:00'),103) as [date] ,left(convert(varchar(10),DATEADD(second, dbo.TB_EVENT_LOG.nDateTime, '19700101 00:00:00'),108),5) as [time],
CASE WHEN dbo.TB_EVENT_LOG.[nReaderIdn] in(539577044) THEN 'F1' WHEN dbo.TB_EVENT_LOG.[nReaderIdn] in(539577051) THEN 'F2' END AS FunctionKey,TB_USER_CUSTOMINFO.sFieldValue8 as EMPLOYEEID
FROM dbo.TB_EVENT_LOG INNER JOIN dbo.TB_USER ON dbo.TB_EVENT_LOG.nUserID = dbo.TB_USER.sUserID INNER JOIN dbo.TB_USER_CUSTOMINFO ON dbo.TB_USER.nUserIdn = dbo.TB_USER_CUSTOMINFO.nUserIdn
where nDateTime > datediff(second, '19700101 00:00:00', DATEADD(DAY, -4, getdate())) and nDateTime < datediff(second, '19700101 00:00:00', getdate())


╔════════════╤═══════╤═════════════╤════════════╗
║ date       │ time  │ FunctionKey │ EMPLOYEEID ║
╠════════════╪═══════╪═════════════╪════════════╣
║ 21/02/2019 │ 08:37 AM │ F1          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 04:39 PM │ F2          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 04:56 PM │ F1          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 05:49 PM│ F2          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 05:53 PM │ F1          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 06:06 PM│ F2          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 01:26 PM│ F1          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 01:32 PM│F1          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 01:33 PM│ F2          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 01:45 PM│ F1          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 03:00 PM│ F2          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 04:38 PM│ F1          │ 19564      ║
╚════════════╧═══════╧═════════════╧════════════╝

结果显示所有出勤时间,即使同一用户每天有多次出勤。

如果有人可以帮助我需要,仅显示每个日期的最小值 F1 和最大值 F2,员工 ID

╔════════════╤═══════╤═════════════╤════════════╗
║ date       │ time  │ FunctionKey │ EMPLOYEEID ║
╠════════════╪═══════╪═════════════╪════════════╣
║ 21/02/2019 │ 08:37 AM│ F1          │ 19564      ║
╟────────────┼───────┼─────────────┼────────────╢
║ 21/02/2019 │ 06:06 PM│ F2          │ 19564      ║
╚════════════╧═══════╧═════════════╧════════════╝

标签: sqldatabase

解决方案


为了在同一列显示结果,我做了一些更改,

SELECT EmployeeID,date,FunctionKey,
CASE when FunctionKey='F1' then min(time) else max(time) end as Final_Time
FROM [TA] group by date,EmployeeID,FunctionKey;

这里的结果将显示 F1 的最小时间值和 F2 每个 EmployeeID 的最小时间值,同一列的日期,我再次不确定您使用的是什么时间类型,也许您可​​以将当前格式转换为 24 小时格式,然后解决。


推荐阅读