gpt4 book ai didi

mysql - 在特定时间范围内获得新记录

转载 作者:行者123 更新时间:2023-11-29 06:51:25 25 4
gpt4 key购买 nike

我的表格设计有点像这样。

id |    date    | user_id
1 | 2013-02-02 | 1
2 | 2013-02-02 | 2
3 | 2013-02-02 | 5
4 | 2013-02-03 | 6
5 | 2013-02-03 | 7
6 | 2013-02-03 | 1

现在我只想为特定日期或时间范围内的新用户选择记录。例如,如果我选择 date=date('2013-02-03'),我只需要新用户的记录,即记录 id 4 和 5,不应返回 6 作为用户已经有记录了。

简单地说,它应该只返回其 user_id 之前没有记录的用户的记录。我尝试使用 not in 运算符编写查询,但我不知道如何为小于当前记录日期的日期提供参数。

[编辑]

这是我到达的地方,也是我被困的地方。

select id from mytable where date=date('2013-02-03') and user_id not in (select user_id from mytable where date<date('2013-02-03'))

当只有一个确切的日期时,这很有效。但是当涉及到时间范围时,比如一个月,我无法弄清楚如何获取内部查询,其中日期应该是该特定用户的记录日期。

[编辑]

用 using having 子句尝试了这个查询。它返回空结果。

select id, date, user_id from mytable having min(date(date))>=date("2013-01-02") and min(date(date))<=date("2013-02-02")

好的,我遇到了这个查询的问题。它检查所有记录中的最小(日期)。我怎样才能让这个查找每个 user_id 的最小记录?

最佳答案

假设你有

+----+------------+---------+
| id | date | user_id |
+----+------------+---------+
| 1 | 2013-02-02 | 1 |
| 2 | 2013-02-02 | 2 |
| 3 | 2013-02-02 | 5 |
| 4 | 2013-02-03 | 6 |
| 5 | 2013-02-03 | 7 |
| 6 | 2013-02-03 | 1 |
| 7 | 2013-02-04 | 6 | <-- additional record for user_id 6
+----+------------+---------+

并且您正在尝试在 2013-02-03 - 2013-02-04 期间获取新用户

SELECT MIN(id) id, MIN(`date`) `date`, `user_id`
FROM (
SELECT *
FROM mytable
WHERE `date` BETWEEN DATE('2013-02-03') AND DATE('2013-02-04')
AND user_id NOT IN (SELECT DISTINCT user_id
FROM mytable
WHERE `date` < DATE('2013-02-03'))
) t
GROUP BY user_id

这将是你的输出:

+------+------------+---------+
| id | date | user_id |
+------+------------+---------+
| 4 | 2013-02-03 | 6 |
| 5 | 2013-02-03 | 7 |
+------+------------+---------+

这里正在工作 sqlfiddle

关于mysql - 在特定时间范围内获得新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15170771/

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