在support_date WHERE中选择最高值的DISTINCT user_id

时间:2015-03-12 10:42:02

标签: mysql sql-order-by max distinct where

tb_supporters

user_id          support_date
-----------------------------
   1              1301283373
   2              1301283743
   3              1301799207
   1              1403862904
   2              1405174895
   3              1415266390

作为查询的结果,它应该输出每个唯一user_id的最高support_date。

我的实际查询:

"SELECT DISTINCT(user_id), support_date
 FROM tb_supporters WHERE
 support_date < " . (time() - 60*60*24*7)

但是,它没有选择user_id旁边的最高support_date。 尝试使用MAX(support_date)GROUP BY user_idORDER BY support_date DESC,但没有任何帮助,它仍然只选择最低的support_date。

请您指导我如何完成此任务,以便仅选择每个user_id旁边的最高support_date?

结果应为:

user_id          support_date
-----------------------------
   1              1403862904
   2              1405174895
   3              1415266390

我的查询中的WHERE子句是为了保留user_ids,其中support_date在过去7天的范围内。

重要提示:此7天范围内的现有user_id我根本不想被选中,即使是最高的support_date也不会被选中。

5 个答案:

答案 0 :(得分:1)

  

我的查询中的WHERE子句是保持 user_ids所在的位置   support_date在过去7天的范围内

你可以这样改写:

  

我的查询中的WHERE子句是选择最高的user_ids   support_date在过去7天的范围内

您可以将GROUP BYMAXHAVING条款一起使用:

SELECT user_id, MAX(support_date)
FROM tb_supporters
GROUP BY user_id
HAVING MAX(support_date) < UNIX_TIMESTAMP(CURRENT_TIMESTAMP - INTERVAL 7 DAY)

请注意,您不能使用WHERE条款,因为它会消除用户支持在过去7天内的;不是群组

答案 1 :(得分:0)

样本表

CREATE Table table_sample(id INT, date INT);

一些INSERT&#39>

INSERT INTO table_sample VALUES(1,1301283373);
INSERT INTO table_sample VALUES(2,1301283743);
INSERT INTO table_sample VALUES(3,1301799207);
INSERT INTO table_sample VALUES(1,1403862904);
INSERT INTO table_sample VALUES(2,1405174895);
INSERT INTO table_sample VALUES(3,1415266390);

SELECT * FROM table_sample;
+------+------------+
| id   | date       |
+------+------------+
|    1 | 1301283373 |
|    2 | 1301283743 |
|    3 | 1301799207 |
|    1 | 1403862904 |
|    2 | 1405174895 |
|    3 | 1415266390 |
+------+------------+
6 rows in set (0.00 sec)

Your query 

SELECT id,MAX(date) FROM table_sample GROUP BY id;
+------------+------+
|  id |MAX(date)  |
+------------+------+
| 1   |  1403862904 |
| 2   |  1405174895 |
| 3   |  1415266390 |
+------------+------+
3 rows in set (0.00 sec)

要查找日期在过去7天的范围内,您可以

SELECT id,MAX(date) FROM table_sample WHERE date <= (UNIX_TIMESTAMP() - (60 * 60 * 24 * 7)) GROUP BY id;
+------+------------+
| id   | MAX(date)  |
+------+------------+
|    1 | 1403862904 |
|    2 | 1405174895 |
|    3 | 1415266390 |
+------+------------+
3 rows in set (0.00 sec)

答案 2 :(得分:0)

尝试类似:

SELECT user_id,max(support_date) as support_date 
FROM mytable 
GROUP BY user_id    
ORDER BY support_date DESC

答案 3 :(得分:0)

SELECT id,max(date)FROM tb_supporters group by id;

答案 4 :(得分:0)

您也可以使用默认的MySQL函数进行unix时间戳

SELECT 
    user_id, MAX(support_date)
FROM
    tb_supporters
WHERE
    support_date < (UNIX_TIMESTAMP() - (60 * 60 * 24 * 7))
GROUP BY user_id