如何从SQL Server中的同一张表中删除最小日期

时间:2019-04-12 16:47:11

标签: sql-server

我在下面有一些简单的记录。

CREATE TABLE TEMPS
(
    ID INT,
    ENTRY_DT DATETIME,
    BIRTH_DT DATETIME,
    NAMES VARCHAR (25)
)

INSERT INTO TEMPS 
VALUES ('123', '6/10/2015', '2/6/2018', 'JOHN'),
       ('123', '2/4/2018', '2/6/2018', 'SMITH'),
       ('123', '2/4/2018', '2/6/2018', 'DOE')

返回

ID  Entry_Date  Birth_Date  Name
-----------------------------------
123 6/10/2015   2/6/2018    John
123 2/4/2018    2/6/2018    Smith
123 2/4/2018    2/6/2018    Doe

我正在尝试从Entry_Date列中查找离Birth_Date列较近(3-6个月范围内)的日期的记录。例如,在此TEMPs表中,有2条记录的输入日期为2/4/18,与出生日期2/6/18接近。这是我尝试的两个步骤:

步骤1:

SELECT
    id, 
    MIN(entry_dt) AS entry_dt
INTO
    test
FROM
    temps
GROUP BY 
    id

第2步:

SELECT * 
FROM temps a 
INNER JOIN test b ON a.id = b.id
WHERE a.entry_dt > b.entry_dt

提取比临时表更多的记录的更有效的方法是什么?过滤掉出生日期前3-6个月内的记录的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

无需在测试table中使用插入数据。您可以在where子句中添加条件。

where birth_dt between entry_dt and dateadd(month,3,entry_dt)

查询

select * 
from TEMPS
where birth_dt between entry_dt and dateadd(month,3,entry_dt)

输出 enter image description here