Sql server 合并两条记录以计算时间差
我想根据Sql server 合并两条记录以计算时间差,sql-server,Sql Server,我想根据intime和outtime计算两个事务之间的时差 请帮助我获得所需的输出 这是我的疑问: SELECT ssno, firstname, lastname, deptname, inreader, in_desc, intime, outreader, out_desc, outtime, CONVERT (VARCHAR(5), DATEADD(MINUTE, DATEDIFF(MINUTE, intime, outtime
intime
和outtime
计算两个事务之间的时差
请帮助我获得所需的输出
这是我的疑问:
SELECT
ssno,
firstname, lastname,
deptname,
inreader, in_desc, intime,
outreader, out_desc, outtime,
CONVERT (VARCHAR(5), DATEADD(MINUTE, DATEDIFF(MINUTE, intime, outtime), 0), 114) AS DIFF,
timeatt
FROM
(SELECT
eid,
ssno,
firstname, lastname,
deptname,
timeatt,
MIN(CASE
WHEN timeatt = 1 THEN intime
ELSE NULL
END) INTIME,
MIN(CASE
WHEN timeatt = 1 THEN INREADER
ELSE NULL
END) inreader,
MIN(CASE
WHEN timeatt = 1 THEN 'SWIPE IN'
ELSE NULL
END) AS IN_DESC,
MAX(CASE
WHEN timeatt = 2 THEN outtime
ELSE NULL
END) OUTTIME,
MAX(CASE
WHEN timeatt = 2 THEN 'SWIPE OUT'
ELSE NULL
END) AS OUT_DESC,
MAX(CASE
WHEN timeatt = 2 THEN OUTREADER
ELSE NULL
END) outreader,
DATEDIFF(MINUTE, outtime, intime) DIFF
FROM
(SELECT
E.empid EID,
EM.firstname, EM.lastname,
EM.ssno,
D.NAME DEPTNAME,
R.readerdesc AS INREADER,
R.readerdesc AS OUTREADER,
-- CAST (E.EVENT_TIME_UTC AS DATE) TIME3,
(CASE
WHEN timeatt = 1
THEN MIN(DATEADD(hh, 03, (E.event_time_utc)))
ELSE NULL
END) INTIME,
(CASE
WHEN timeatt = 2
THEN MAX(DATEADD(hh, 03, (E.event_time_utc)))
ELSE NULL
END) OUTTIME,
R.timeatt
FROM
((events E
INNER JOIN
emp EM ON (E.empid = EM.id))
FULL JOIN
reader R ON E.devid = R.readerid
AND E.machine = R.panelid)
FULL JOIN
udfemp UE ON (EM.id = UE.id)
FULL JOIN
dept D ON (UE.dept = D.id)
WHERE
E.eventid = '0'
AND E.empid = 31669
AND CAST(E.event_time_utc AS DATE) = '2019-08-28'
GROUP BY
CAST(E.event_time_utc AS DATE),
E.empid, EM.firstname, EM.lastname,
EM.ssno, D.NAME, R.readerdesc, R.timeatt) AS T1
GROUP BY
eid,
firstname, lastname,
ssno,
deptname,
DATEDIFF(MINUTE, outtime, intime), timeatt) AS T2
--WHERE OUTTIME IS NOT NULL
GROUP BY
eid,
firstname, lastname, ssno,
deptname,
DATEDIFF(MINUTE, outtime, intime),
intime, outtime, in_desc, out_desc, inreader, outreader,
timeatt
ORDER BY
intime DESC;
需要合并到单个记录中的输出,如前所述,这是为了计算一天的时差
谢谢
Santhosh这可能会帮助您从GROUPBY子句中删除datetime列 请检查以下查询并让我们知道
SELECT ssno, firstname, lastname, deptname, inreader, in_desc, intime, outreader, out_desc, outtime, CONVERT (VARCHAR(5), DATEADD(MINUTE, DATEDIFF(MINUTE, intime, outtime), 0), 114) AS DIFF, timeatt FROM (SELECT eid, ssno, firstname, lastname, deptname, timeatt, MIN(CASE WHEN timeatt = 1 THEN intime ELSE NULL END) INTIME, MIN(CASE WHEN timeatt = 1 THEN INREADER ELSE NULL END) inreader, MIN(CASE WHEN timeatt = 1 THEN 'SWIPE IN' ELSE NULL END) AS IN_DESC, MAX(CASE WHEN timeatt = 2 THEN outtime ELSE NULL END) OUTTIME, MAX(CASE WHEN timeatt = 2 THEN 'SWIPE OUT' ELSE NULL END) AS OUT_DESC, MAX(CASE WHEN timeatt = 2 THEN OUTREADER ELSE NULL END) outreader, DATEDIFF(MINUTE, outtime, intime) DIFF FROM (SELECT E.empid EID, EM.firstname, EM.lastname, EM.ssno, D.NAME DEPTNAME, R.readerdesc AS INREADER, R.readerdesc AS OUTREADER, -- CAST (E.EVENT_TIME_UTC AS DATE) TIME3, (CASE WHEN timeatt = 1 THEN MIN(DATEADD(hh, 03, (E.event_time_utc))) ELSE NULL END) INTIME, (CASE WHEN timeatt = 2 THEN MAX(DATEADD(hh, 03, (E.event_time_utc))) ELSE NULL END) OUTTIME, R.timeatt FROM ((events E INNER JOIN emp EM ON (E.empid = EM.id)) FULL JOIN reader R ON E.devid = R.readerid AND E.machine = R.panelid) FULL JOIN udfemp UE ON (EM.id = UE.id) FULL JOIN dept D ON (UE.dept = D.id) WHERE E.eventid = '0' AND E.empid = 31669 AND CAST(E.event_time_utc AS DATE) = '2019-08-28' GROUP BY --CAST(E.event_time_utc AS DATE), -- This may be not needed.
E.empid, EM.firstname, EM.lastname, EM.ssno, D.NAME, R.readerdesc, R.timeatt) AS T1 GROUP BY eid, firstname, lastname, ssno, deptname, --DATEDIFF(MINUTE, outtime, intime),-- This may be not needed.
timeatt) AS T2 --WHERE OUTTIME IS NOT NULL GROUP BY eid, firstname, lastname, ssno, deptname, ---DATEDIFF(MINUTE, outtime, intime),-- This may be not needed.
intime, outtime, in_desc, out_desc, inreader, outreader, timeatt ORDER BY intime DESC;
样本数据(可消费样本数据,而非图像)和预期结果将帮助我们帮助您。感谢您的回复,我对SQL SERVER DB非常陌生,您能告诉我如何提供示例数据吗?我对如何提供示例数据有点困惑,因为结果是从多个表中获取数据。然后为每个表提供示例数据。感谢Jiken,我得到了相同的结果,记录在两个不同的行中。我想它应该是带有大小写的东西,我正在努力寻找,但没有得到。