我有一个具有这种结构的sql表
id,userid, name, date1, date2
所以我有这样的行
1, 1, name33, 2018-10-12, 2018-10-13
2, 1, name22, 2018-10-12, 2018-10-13
3, 1, name90, 2018-10-12, 2018-10-13
4, 2, name11, 2018-10-14, 2018-10-15
5, 2, name12, 2018-10-14, 2018-10-15
6, 2, name30, 2018-10-14, 2018-10-15
我想得到的是这个
userid, date1, date2
1, 2018-10-12, 2018-10-13
2, 2018-10-14, 2018-10-15
对于每个用户,只有1行(因此请不要显示date1和date2相同的行)
我尝试了这个,但是没有用
SELECT * (DISTINCT date1,date2) FROM orders
答案 0 :(得分:2)
您以错误的方式使用DISTINCT
;它不是一个功能。以下查询将获得userid, date1, date2
SELECT DISTINCT
userid,
date1,
date2
FROM orders
答案 1 :(得分:0)
如果您确实希望如标题和示例查询中所述SELECT *
,可以使用GROUP BY
来实现这一点-尽管要小心,您未汇总的列将显示一些一种任意值,如果您打开了ONLY_FULL_GROUP_BY
,则会抛出错误:
SELECT *
FROM `orders`
GROUP BY userid, date1, date2
要正确使用GROUP BY
,您应该只选择分组的列或在其他列上使用聚合函数。例如,这将获得DISTINCT userid, date1 and date2
值,同时将每个组的所有name
值显示为以逗号分隔的列表:
SELECT userid, date1, date2, GROUP_CONCAT(`name`) as grouped_names
FROM `orders`
GROUP BY userid, date1, date2
答案 2 :(得分:-1)
Select userid,distinct date1,distinct date2 from table group by userid
这宁可将所有具有不同日期的用户ID分组。