【发布时间】:2021-08-10 00:12:31
【问题描述】:
我的桌子是
+-------+----------------+---------+--------------+-------------------+
| id | invoice_number | user_id | created_date | next_contact_date |
+-------+----------------+---------+--------------+-------------------+
| 42699 | 100 | 236 | 2021-05-19 | 2022-08-09 |
| 42693 | 100 | 236 | 2021-03-01 | 2022-08-09 |
| 42694 | 100 | 30 | 2021-03-01 | 2022-08-08 |
| 42695 | 100 | 235 | 2021-03-03 | 2022-08-09 |
| 42696 | 100 | 30 | 2021-05-01 | 2022-08-02 |
| 42697 | 100 | 235 | 2021-05-03 | 2022-08-04 |
| 42698 | 100 | 236 | 2021-05-04 | 2022-08-02 |
| 42700 | 100 | 30 | 2021-05-19 | 2022-08-08 |
| 42701 | 100 | 235 | 2021-05-20 | 2022-08-08 |
| 42702 | 100 | 236 | 2021-05-19 | 2022-08-09 |
+-------+----------------+---------+--------------+-------------------+
我想根据每个 user_id 组的 id 检索最后一条记录,但前提是它在 next_contact_date 范围之间
期望的输出
如果用户选择检索 2022-08-01 和 2022-08-15 之间的记录,则应该是
+-------+----------------+---------+--------------+-------------------+
| id | invoice_number | user_id | created_date | next_contact_date |
+-------+----------------+---------+--------------+-------------------+
| 42700 | 100 | 30 | 2021-05-19 | 2022-08-08 |
| 42701 | 100 | 235 | 2021-05-20 | 2022-08-08 |
| 42702 | 100 | 236 | 2021-05-19 | 2022-08-09 |
+-------+----------------+---------+--------------+-------------------+
效果很好!!!!
如果现在用户选择检索 2022-08-01 和 2022-08-05 之间的记录,它应该是 EMPTY,因为每个 user_id 组的最后一个 id 不在里面next_contact_date。
我的尝试
SELECT * FROM mytable WHERE id IN
(SELECT MAX(id) AS id FROM mytable where mytable.next_contact_date BETWEEN '2022-08-01' AND '2022-08-05 23:59:59.999' GROUP BY user_id)
我得到的结果不是我想要的。结果应该是空的,因为最后的记录不属于用户指定的 next_contact_date 范围。
+-------+----------------+---------+-----------------+-------------------+
| id | invoice_number | user_id | created_date | next_contact_date |
+-------+----------------+---------+-----------------+-------------------+
| 42696 | 100 | 30 | 2021-05-01 | 2022-08-02 |
| 42697 | 100 | 235 | 2021-05-03 | 2022-08-04 |
| 42698 | 100 | 236 | 2021-05-04 | 2022-08-02 |
+-------+----------------+---------+-----------------+-------------------+
【问题讨论】:
-
但请注意,以
SELECT *开头并以GROUP BY ...结尾的一切都不会顺利 -
你有 3 个 user_ids,我不明白为什么 30 是 goubled
-
这就是为什么我们喜欢结构良好的问题并提供有关如何构建它们的信息。
-
@nbk 我很抱歉这是创建帖子时的错误。
-
@Strawberry 对不起,我不想失礼。为什么你认为我的问题结构不完善?我读了你给我的文章,我没有看到我做了任何与它所说的不同的事情
标签: mysql group-by inner-join