我喜欢按日,月份对结果进行分组。我的问题是,在我的业务中,这一天从下午2点(14:00:00)开始,到上午8点(8:00:00)结束。
此处的目标是计算一天内注册的唯一身份用户的数量。
我的表格如下:
id customer join_date leave_date duration
6247 4043035 2013-06-07 14:32:00 2013-06-07 14:57:24 1524
6248 4006087 2013-06-07 14:32:11 2013-06-07 14:41:18 547
6249 4020103 2013-06-07 14:32:30 2013-06-07 15:24:32 3122
6250 4020103 2013-06-07 14:32:30 2013-06-07 14:41:18 528
6251 4020103 2013-06-07 14:32:30 2013-06-07 15:55:33 4983
6252 4049611 2013-06-07 14:34:14 2013-06-07 17:14:25 9611
6253 4049611 2013-06-07 14:34:14 2013-06-07 14:57:15 1381
6254 4046774 2013-06-07 14:36:21 2013-06-07 14:41:18 297
6255 4048402 2013-06-07 14:37:51 2013-06-07 14:41:18 207
6256 4006073 2013-06-07 14:39:54 2013-06-07 14:42:19 145
6257 4022477 2013-06-07 14:40:40 2013-06-07 14:46:44 364
6258 4049923 2013-06-07 14:42:08 2013-06-07 14:57:09 901
6259 4018158 2013-06-07 14:45:05 2013-06-07 14:45:43 38
6260 4010012 2013-06-07 14:45:39 2013-06-07 14:46:44 65
6261 4018158 2013-06-07 14:45:43 2013-06-07 14:53:16 453
在“正常”的日子里,我的请求看起来像这样:
SELECT count(distinct l.customer) nbj,
DAY(l.join_date) jour,
MONTH(l.join_date) mois,
str_to_date(l.join_date,'%Y-%m-%d') ordre
FROM log_waitingtime l
GROUP BY DAY(l.join_date), MONTH(l.join_date)
ORDER BY ordre ASC
工作正常。
我尝试了很多东西: http://forums.mysql.com/read.php?10,202789,202807 http://www.artfulsoftware.com/infotree/qrytip.php?id=819
我认为那些解决方案很复杂(我甚至不理解一切。
那么,在SQL中有没有更简单的方法来实现它?
答案 0 :(得分:1)
我会使用此查询:
SELECT
MONTH(l.join_date - INTERVAL 14 HOUR) mois,
DAY(l.join_date - INTERVAL 14 HOUR) jour,
COUNT(distinct l.customer) nbj,
str_to_date(l.join_date - INTERVAL 14 HOUR,'%Y-%m-%d') ordre
FROM log_waitingtime l
GROUP BY
MONTH(l.join_date - INTERVAL 14 HOUR),
DAY(l.join_date - INTERVAL 14 HOUR)
ORDER BY
ordre ASC
答案 1 :(得分:1)
尝试此操作将显示一天中注册的客户 2PM(14:00:00)8 AM(8:00:00)持续时间
SELECT q.* FROM(
SELECT COUNT(DISTINCT l.customer) nbj,
DATE_FORMAT(l.join_date,'%H:%i:%s') TIMEONLY,
DAY(l.join_date) jour,
MONTH(l.join_date) mois,
STR_TO_DATE(l.join_date,'%Y-%m-%d') ordre
FROM log_waitingtime l
GROUP BY DAY(l.join_date), MONTH(l.join_date)
) q WHERE q.TIMEONLY >= '14:00:00' OR q.TIMEONLY <= '08:00:00'
ORDER BY q.jour,q.mois, q.ordre ASC