gpt4 book ai didi

mysql - 查询最近 30 分钟创建的记录,然后查找最近 1 小时创建的记录

转载 作者:行者123 更新时间:2023-11-29 22:00:47 24 4
gpt4 key购买 nike

我有一个项目数据库,我需要从中找到过去 30 分钟内创建的项目,并希望按 category 对它们进行排序。 ,然后我想要在过去 1 小时内创建的项目,但我想排除之前找到的项目,并且我想再次按其 category 对它们进行排序。 .

我当前使用的方法是使用联合。我不太确定这是否是最好的方法。我的直觉告诉我有更好的方法可以做到这一点,只是不知道如何做。

这是一组数据和查询的示例

id    category_id    created_at
1 1 10 mins ago
2 1 12 mins ago
3 2 10 mins ago
4 2 14 mins ago
5 1 40 mins ago
6 2 43 mins ago
7 1 34 mins ago

(select * from items where created_at >= NOW() - 30 mins order by category_id) union (select * from items where created_at >= NOW() - 60 mins and created_at < NOW() - 30 mins order by category_id)

示例查询在语法上显然不正确。

创建表 create table items (id int(11), category_id int(11), created_at datetime);

输出:

id    category_id    created_at
1 1 10 mins ago
2 1 12 mins ago
3 2 10 mins ago
4 2 14 mins ago
5 1 40 mins ago
7 1 43 mins ago
6 2 34 mins ago

最佳答案

你的想法是正确的,但正确的语法是这样的:

SELECT "last 30 minutes" as t, category_id, count(*) as cnt
FROM items
WHERE created_at >= NOW() - INTERVAL 30 MINUTE
GROUP BY category_id
UNION ALL
SELECT "last 1 hour" as t, category_id, count(*) as cnt
FROM items
WHERE
created_at < NOW() - INTERVAL 30 MINUTE
AND created_at >= NOW() - INTERVAL 60 MINUTE
GROUP BY category_id

...等等...

此查询将统计过去 30 分钟内的事件(按 Category_id 分组),然后统计过去一小时内但不包括过去 30 分钟内的所有事件。

UNION ALL

在这种情况下比 UNION 更好,因为 UNION 将返回唯一的行。

编辑

根据您更新的问题,我认为您正在寻找这个:

SELECT items.*
FROM items
WHERE created_at>=NOW() - INTERVAL 60 MINUTE
ORDER BY
(created_at >= NOW() - INTERVAL 30 MINUTE) DESC,
category_id

如果你有更多的间隔,那么你可以使用这个:

SELECT items.*
FROM items
WHERE created_at>=NOW() - INTERVAL 120 MINUTE
ORDER BY
(created_at >= NOW() - INTERVAL 30 MINUTE) DESC,
(created_at >= NOW() - INTERVAL 60 MINUTE) DESC,
category_id

关于mysql - 查询最近 30 分钟创建的记录,然后查找最近 1 小时创建的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32677488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com