给定一个如下表格,UNIQUE CONSTRAINT(user, date)
,如何选择列表(1, 2)
中所有用户共用的max(date)
?选择多行最常用的日期
ID | date | user | value
-----------------------------
1 | 2016-5-1 | 1 | a
2 | 2016-5-1 | 2 | b
3 | 2016-5-3 | 2 | c
4 | 2015-5-4 | 1 | d
因此,与WHERE user IN (1, 2)
,查询应该返回2016-5-1
。
到目前为止我有两个工作版本,但都不是很干净。有没有更好/更通用/更灵活的方法来实现我想要的?注意我只需要这个在PostgreSQL中工作。
一个)依靠sensor
列表的长度:
SELECT a.date FROM
(SELECT date, COUNT(date)
FROM mytable WHERE sensor_id IN (8, 9)
GROUP BY date ORDER BY date DESC) a
WHERE a.count = 2 LIMIT 1;
b)用独立的子查询:
SELECT i.date
FROM (SELECT date FROM mytable WHERE user_id=1) i
JOIN (SELECT date FROM mytable WHERE user_id=2) j
ON i.date = j.date ORDER BY date DESC LIMIT 1;
按日期降序排序和选择只有1条记录似乎是我的最佳途径。 – AliIshaq
这仅适用于两个用户还是用于任意数量的用户? – dnoeth
@ dnoeth任意数字 – Geotob