以下代码为2016年3月1日至2017年2月28日期间向在线社区提供标签的用户。

SELECT userid, COUNT(*) AS tags
FROM tag_events
WHERE tstamp >= ‘2016-03-01’ AND tstamp <= ‘2017-03-01’
GROUP BY userid
ORDER BY tags DESC;


tag_events是表,tstamp是标记的时间戳,userid是用户ID,表中的每个条目均包含有关一个标记的信息。

我对在此期间的第一笔捐款至少在他们的最后一笔捐款之前的两个日历日内的用户感兴趣(因此,将计算7月1日和3日,将计算7月1,2,3日,但将不计算7月1日和2日)。

如何修改代码?

最佳答案

您应该通过使用datediff function计算第一个时间戳和最后一个时间戳之间的天数差来获得所需的结果,如下所示:

SELECT userid, COUNT(*) AS tags
FROM tag_events
WHERE tstamp >= '2016-03-01' AND tstamp <= '2017-03-01'
GROUP BY userid
HAVING DATEDIFF(MAX(tstamp), MIN(tstamp)) > 1
ORDER BY tags DESC;


Sample SQL Fiddle

关于mysql - 两次捕获贡献的SQL代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45776938/

10-11 07:06