gpt4 book ai didi

Mysql查询,只返回日期不与其他记录日期重叠的记录

转载 作者:行者123 更新时间:2023-11-29 18:34:18 27 4
gpt4 key购买 nike

要跟踪订单,我需要订单表中的订单 ID 并检查 orderdates 表以确保订单是在特定日期范围内制作的。使用以下查询我可以获取 id,但它也会返回 id 3,这也是不需要的。

示例:请参阅 orderdates 表。 ID 3 的第一个日期与 ID 2 的最后一个日期重叠。

如果 id 的第一个日期与其他 id 的最后一个日期重叠,或者是否有可能,我必须如何更改不返回 id 的查询?

SELECT id
FROM orders
WHERE id in(
SELECT id
FROM orderdates
WHERE
orderdate BETWEEN '2017-06-01' AND '2017-06-30'
GROUP BY id);


orders  
id sent
1 1
2 1
3 1


orderdates  
id orderdate
1 2017-6-10
1 2017-6-11
1 2017-6-12
1 2017-6-13
2 2017-6-14
2 2017-6-15
2 2017-6-16
2 2017-6-17 <--- Last date of id 2
3 2017-6-17 <--- First date of id 3
3 2017-6-18
3 2017-6-19
3 2017-6-20

最佳答案

也许我会在这里比较每个 id 的最短日期和每个 id 的最大日期

select u.*
from t u
where u.id not in
(
select z.id
from
(
select s.*,t.id tid,t.mindt tmindt,t.maxdt tmaxdt
from
(
select id, min(dt) mindt,max(dt) maxdt
from t
group by id
order by id
) s
join
(select id, min(dt) mindt,max(dt) maxdt
from t
group by id
order by id
) t on
t.id <> s.id and
t.maxdt = s.mindt
) z
)
order by u.id,u.dt

鉴于此

truncate table t;
insert into t values
(1,'2017-01-01'),(1,'2017-01-02'),
(2,'2017-01-03'),(2,'2017-01-04'),
(3,'2017-01-04')

结果

+------+------------+
| id | dt |
+------+------------+
| 1 | 2017-01-01 |
| 1 | 2017-01-02 |
| 2 | 2017-01-03 |
| 2 | 2017-01-04 |
+------+------------+
4 rows in set (0.00 sec)

鉴于此

truncate table t;
insert into t values
(1,'2017-01-01'),(1,'2017-01-02'),
(2,'2017-01-03'),(2,'2017-01-04'),
(3,'2017-01-04'),
(4,'2017-01-04'),(4,'2017-01-06');

结果

+------+------------+
| id | dt |
+------+------------+
| 1 | 2017-01-01 |
| 1 | 2017-01-02 |
| 2 | 2017-01-03 |
| 2 | 2017-01-04 |
+------+------------+
4 rows in set (0.00 sec)

给定

truncate table t;
insert into t values
(1,'2017-01-01'),(1,'2017-01-02'),
(2,'2017-01-03'),(2,'2017-01-04'),
(3,'2017-01-04'),
(4,'2017-01-05'),(4,'2017-01-06');

结果

+------+------------+
| id | dt |
+------+------------+
| 1 | 2017-01-01 |
| 1 | 2017-01-02 |
| 2 | 2017-01-03 |
| 2 | 2017-01-04 |
| 4 | 2017-01-05 |
| 4 | 2017-01-06 |
+------+------------+
6 rows in set (0.02 sec)

关于Mysql查询,只返回日期不与其他记录日期重叠的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45434861/

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