mysql:从表中选择*,但在特定列中具有唯一值

时间:2018-11-25 14:21:56

标签: mysql sql

我有一个具有这种结构的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 

3 个答案:

答案 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分组。