我有一张看起来像这样的表
id, user_id , type, date
3, ivnWvOQqoN, iOS , 2015-11-24 15:46:09
4, dskIbJhuSd, iOS , 2015-11-23 19:39:31
5, dskIbJhuSd, iOS , 2015-11-24 23:37:45
6, ----------, iOS , 2015-11-22 23:38:05
7, ----------, iOS , 2015-11-23 23:38:10
现在我正在做这样的查询
SELECT COUNT(*) AS entries, user_id, DATE(created_at) as date, device_type
FROM App_Usage
WHERE device_type = 'iOS'
AND created_at between 2015-11-22 AND 2015-11-25
GROUP BY DATE(created_at), user_id
这个返回结果我希望它看起来像这个
((1L, '----------', datetime.date(2015, 11, 22), 'ios'),
(1L, 'dskIbJhuSd', datetime.date(2015, 11, 23), 'ios'),
(1L, '----------', datetime.date(2015, 11, 23), 'ios'),
(1L, 'dskIbJhuSd', datetime.date(2015, 11, 24), 'ios'),
(1L, 'ivnWvOQqoN', datetime.date(2015, 11, 24), 'ios')
上面代码中的最后两行,成为下一个代码中的最后一行。上面代码中的第二行在下面的代码中变为第二行。
我的问题是我可以按日期分组,如果用户不是'----------'
,那么它会返回这样的结果
((1L, '----------', datetime.date(2015, 11, 22), 'ios'),
(1L, 'combo of users' datetime.date(2015, 11, 23), 'ios'),
(1L, '----------', datetime.date(2015, 11, 23), 'ios'),
(2L, 'combo of users', datetime.date(2015, 11, 24), 'ios'),
我在第一个结果中留下了user_id,以表明只要用户为'---------'
我希望这些分组,其他分组。
所以我想按日期分组,然后按用户不是'----------'
的方式分组,我怎么能这样做,或者甚至可能呢?
渴望输出
输出:
number of uses, user_id**, type, date;
(1, '----------', 'ios', '2015-11-22 23:38:05'),
(1, 'some users or combo', 'ios', '2015-11-22 13:33:33'),
(2, 'some users or combo', 'ios', '2015-11-23 13:35:37'),
(1, '----------', 'ios', '2015-11-24 00:09:44'),
(2, 'some users or combo', 'ios', '2015-11-24 00:09:44'),
**所以我想要任何'----------'的用户 与'-------'组合但任何不是'--------'的用户 与所有其他用户一起吃饭。正如你在24日所看到的那样 将2种不同的用途作为一种用途,并使用'-------' 是serperate(这是上面的最后两行)
答案 0 :(得分:1)
select count(*) as entries, dateCreate, device_type, user_id
from
(SELECT DATE(created_at) as dateCreate, device_type, case when user_id = '----------' then '-----------' else 'combo of users' as user_id
FROM App_Usage
WHERE device_type = 'iOS'
AND created_at between 2015-11-22
AND 2015-11-25) as temp_table
GROUP BY dateCreate, user_id, device_type
注意:使用dateCreate而不是date,因为它是关键字