我有一个用户正在做24小时的事情,我想看看他是否做了5次30分钟。到目前为止,我正在尝试使用此查询,但是,请不要介意我在count()
之后放在方括号中它显示的数字对我没有任何意义... 5或6.并且列名为日期和小时显示一小时也很奇怪。
SELECT
User_ID,
DateAdd(mi, 30, Event_Time),
count(???) AS NumOFTimes
FROM
Table_Name
GROUP BY
User_ID, DateAdd(mi, 30, (Event_Time))
HAVING
COUNT(User_ID) >= 5
ORDER BY
User_ID
结果输出:
+---------+-------------------------+-------+
| user_ID | (no colum name) | times |
+---------+-------------------------+-------+
| 295791 | 2017-02-14 19:54:00.000 | 5 |
| 569676 | 2017-02-14 15:34:00.000 | 6 |
| 591081 | 2017-02-14 08:34:00.000 | 6 |
| 803702 | 2017-02-14 12:44:00.000 | 5 |
| 832821 | 2017-02-14 15:23:00.000 | 5 |
+---------+-------------------------+-------+
感谢您的时间和支持!
答案 0 :(得分:0)
SELECT USER_ID, EVENT_TIME, CT
FROM TABLE_NAME T
CROSS APPLY
(
SELECT COUNT(*) CT FROM TABLE_NAME T2
WHERE T.USER_ID = T2.USER_ID
AND T2.EVENT_TIME BETWEEEN T1.EVENT_TIME AND DATEADD(N, 30, T1.EVENT_TIME)
) CTS
WHERE CTS.CT >= 5
对于TABLE_NAME
中的每一行,此查询将识别同一用户在30分钟内的记录数。这种方法可能不具备性能,因为它需要为每条记录单独查询,如果表格很大,则建议包含EVENT_TIME的USER_ID上的索引。
答案 1 :(得分:0)
使用子查询添加基于end_time
的{{1}}和自我加入,以及现有user_id
和计算event_time
之间的event_time
:< / p>
end_time