gpt4 book ai didi

sql-server - 按存在和不存在的日期获取记录

转载 作者:行者123 更新时间:2023-12-03 08:28:21 25 4
gpt4 key购买 nike

表格:

create table dttest
(
names varchar(20),
coldate datetime
);

记录:

insert into dttest values('A','2019-10-31');
insert into dttest values('A','2019-10-30');
insert into dttest values('A','2019-10-29');
insert into dttest values('B','2019-10-14');
insert into dttest values('B','2019-10-22');

查询:我试图只获取那些出现在特定日期但不出现在某些日期的记录。

尝试 1:

SELECT * 
FROM dttest
WHERE (CONVERT(VARCHAR(10),CAST(coldate as DATE),105) NOT IN ('31-10-2019','22-10-2019')) AND
(CONVERT(VARCHAR(10),CAST(coldate as DATE),105) IN ('14-10-2019'))

输出:

names       coldate
------------------------------
B 2019-10-14 00:00:00.000

B 不应出现,因为它也出现在 22-10-2019 中,预期输出为 NULL。

尝试 2:

SELECT * 
FROM dttest t
WHERE NOT EXISTS
(
SELECT 1
FROM dttest t1
WHERE t.names = t1.names
AND (CONVERT(VARCHAR(10),CAST(t1.coldate as DATE),105) NOT IN ('31-10-2019','30-10-2019'))
) AND
EXISTS
(
SELECT 1 FROM dttest t2
WHERE t.names = t2.names
AND (CONVERT(VARCHAR(10),CAST(t2.coldate as DATE),105) IN ('14-10-2019'))
)

没有结果,但预期的输出是 B

最佳答案

您的第二个查询有双重否定条件(NOT EXISTSNOT IN)。所以下面的查询应该得到预期的结果:

SELECT DISTINCT names
FROM dttest
WHERE NOT EXISTS (
SELECT 1
FROM dttest t1
WHERE CONVERT(VARCHAR(10), CAST(coldate as DATE), 105) IN ('31-10-2019','30-10-2019')
AND t1.names = dttest.names
) AND EXISTS (
SELECT 1
FROM dttest t1
WHERE CONVERT(VARCHAR(10), CAST(coldate as DATE), 105) IN ('14-10-2019')
AND t1.names = dttest.names
)

demo on dbfiddle.uk

关于sql-server - 按存在和不存在的日期获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58640690/

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