从特定日期中选择唯一记录,但不包括先前日期中的重复记录

时间:2019-02-12 06:05:28

标签: mysql sql sql-server date

我必须从第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年重复。

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'