我必须从第1年和第2年存在的表中选择不同的UC_Name
,为此,我正在使用以下查询:
(select DISTINCT(UC_NAME) from [table]
where cast([DATE_FORMATION] as date) <= '06-30-2018 00:00:00') as Year1
(select DISTINCT(UC_NAME) from [table]
where cast([DATE_FORMATION] as date) BETWEEN '06-30-2018 00:00:00' AND '06-30-2019 00:00:00') as Year2
就不同的值而言,它为我提供了正确的值,但是我想获得仅在第2年唯一存在且在year1中不存在的UC_Name,即使它们在year2日期中是唯一的想要删除year1中现有的UC_Name。我希望我清楚明白了我想要得到什么。
它给我这样的结果:
**Year1:**
Balicha
Kunchiti
Sangahi
Solband
Tijaban
**Year2**
Balicha
Khairabad
Kuddan
Kunchiti
Nasirabad
Nodiz
Sami
Sangahi
Shahrak
Solband
Tijaban
第1年的某些值也出现在第2年,在第2年是唯一的,但是我希望第2年的值是唯一的,并且也不会在第1年重复。
答案 0 :(得分:3)
我觉得日期范围不对。两个组中都存在日期2018-06-30
。请记住,这里是NOT EXISTS
解决方案:
SELECT UC_NAME
FROM t
WHERE DATE_FORMATION >= '2018-07-01'
AND DATE_FORMATION < '2019-07-01' -- made exclusive
AND NOT EXISTS (
SELECT 1
FROM t AS x
WHERE UC_NAME = t.UC_NAME
AND DATE_FORMATION < '2018-07-01' -- made exclusive
)
GROUP BY UC_Names
您还可以使用聚合:
SELECT UC_NAME
FROM t
WHERE DATE_FORMATION < '2019-07-01'
GROUP BY UC_NAME
HAVING MIN(DATE_FORMATION) >= '2018-07-01'