以下是数据: 表1:
usernum|username
-------|--------
1 |JBlow
-------|--------
2 |CFarley
表2:
usernum|logdate |actionnum |extrainfo1
-------|-----------------------|----------|-----------
1 |2016-06-27 10:36:55.033| 202 |50
-------|-----------------------|----------|-----------
1 |2016-06-27 10:40:37.800| 266 |8
-------|-----------------------|----------|-----------
2 |2016-06-27 10:43:18.817| 202 |23
-------|-----------------------|----------|-----------
2 |2016-06-27 10:48:32.413| 266 |7
我想要做的就是加入“用户界面”中的表格。这样我就可以在结果中获取用户名。
接下来,我想使用datediff来计算表2中的logdates之间的时间分钟。表2中的每个条目都有一个与之关联的actionnum。在这种情况下,我想找到与actionnum 202(start)关联的logdate和与actionnum 266(end)关联的logdate之间的区别。
我还想从202个actionnum行中包含extrainfo1。
我要找的最终结果将包含以下列: username,{datediff result},extrainfo1
这是我提出的一个查询,它将显示用户名,logdate,extrainfo1和actionnum。我已经尝试了带有子查询的约会功能,并且无法使其工作,但我不是专家。
SELECT a.username, b.logdate, b.extrainfo1 AS 'DocumentCount', b.actionnum
FROM hsi.useraccount a
LEFT JOIN hsi.scanninglog b
ON a.usernum = b.usernum
WHERE b.actionnum = 266
OR b.actionnum = 202
GROUP BY a.username,b.logdate, b.extrainfo1, b.actionnum
提前感谢您的帮助!
答案 0 :(得分:0)
一种方法使用两个连接:
SELECT ua.*, sls.*,
dateadiff(day, sls.logdate, sle.logdate) as diff_in_days
FROM hsi.useraccount ua LEFT JOIN
hsi.scanninglog sls
ON ua.usernum = sls.usernum AND sls.actionnum = 202 LEFT JOIN
hsi.scanninglog sle
ON ua.usernum = sle.usernum AND sle.actionnum = 266;
答案 1 :(得分:0)
您想要的查询应如下所示。我在hsi.scanninglog
上加入了两次来表示开始和结束日志。
SELECT
a.username 'Username',
CASE
WHEN c.logdate IS NULL THEN 0
ELSE datediff(minute, b.logdate, c.logdate)
END 'Login Duration',
b.extrainfo 'Extra Info'
FROM
hsi.useraccount a
LEFT JOIN hsi.scanninglog b
ON b.usernum = a.usernum AND b.actionnum = 266 -- Start
LEFT JOIN hsi.scanninglog c
ON c.usernum = a.usernum AND c.actionnum = 202 -- END
GROUP BY
a.username,
b.extrainfo
答案 2 :(得分:0)
试试这种方式
select a.usernum,minlog,maxlog,datediff(minute,minlog,maxlog) as diff from
(select usernum,min(logdate) as minlog from tbl_log group by usernum) as a
left join
(select usernum,max(logdate) as maxlog from tbl_log group by usernum) as b
on a.usernum = b.usernum
你可以改变分钟或日期差异,它取决于你的。 希望它有所帮助