3. 有一个表A,请使用SQL找出所有根据user_code重复,且open_time与close_time存在重复的数据,如果close_time为空则默认为关闭时间无穷大。 Id user_code … open_time close_time 1 A 2019-01-01 2019-12-31 2 B 2019-02-01 3 C 2019-02-03 2019-12-31 … 100 A 2020-01-01 101 C 2018-01-01 2020-12-31 … 200 A 2020-06-01 201 B 2019-06-01 2020-12-31 … 例如上表中的数据,第1行与100、200行虽然user_code重复,但时间不重叠,不应该被查出来;100行与200行user_code重复,且open_time与close_time存在重叠;3行与101行的存在重叠应该被查出来;2行与201行时间存在重叠应该查出来。
时间: 2023-05-24 14:05:06 浏览: 346
SELECT a1.*
FROM tableA a1
INNER JOIN tableA a2
ON a1.user_code = a2.user_code
AND NOT (a1.open_time >= a2.close_time OR a2.open_time >= a1.close_time)
AND a1.id < a2.id
WHERE a1.close_time IS NOT NULL OR a2.close_time IS NOT NULL
OR a1.open_time = a2.open_time
OR a1.close_time = a2.close_time
ORDER BY a1.id;
相关问题
3. 有一个表A,请使用SQL找出所有根据user_code重复,且open_time与close_time存在重复的数据,如果close_time为空则默认为关闭时间无穷大。
SELECT a1.*
FROM A a1
INNER JOIN A a2
ON a1.user_code = a2.user_code
WHERE (a1.open_time = a2.open_time AND (a1.close_time = a2.close_time OR a1.close_time IS NULL OR a2.close_time IS NULL))
AND a1.id <> a2.id
有一个表a,请写出一条sql语句找出所有根user_code重复,且open_time与close_time存
在同一天的记录:
```
SELECT * FROM a
WHERE DATE(open_time) = DATE(close_time)
AND user_code IN (
SELECT user_code FROM a
GROUP BY user_code
HAVING COUNT(*) > 1
)
ORDER BY user_code;
```
阅读全文