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_id
,ORDER 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也不会被选中。
答案 0 :(得分:1)
我的查询中的WHERE子句是保持 user_ids所在的位置 support_date在过去7天的范围内 。
你可以这样改写:
我的查询中的WHERE子句是选择最高的user_ids support_date在过去7天的范围内 。
您可以将GROUP BY
和MAX
与HAVING
条款一起使用:
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