SQL Server - SQL-запрос для поиска дублирующихся записей с разными датами - PullRequest
0 голосов
/ 24 апреля 2018

Мне нужно найти дубликаты записей (ID), которые имеют разные даты, однако дубликат должен быть в день до / после оригинала. По сути, я пытаюсь выяснить, использовались ли идентичные идентификаторы в другой день.

Я могу найти дубликаты, но не могу получить правильную часть даты, есть ли более простой способ выполнить вышеуказанное?

Я пробовал следующее, но чувствую, что слишком усложняю вещи:

SELECT *  
FROM table
WHERE ID IN (
    SELECT ID
    FROM Table
    Where [DATE] < DATEADD(day, +1, [DATE]) and ID=ID
    GROUP BY ID
    HAVING COUNT(*) > 1 )
    ORDER BY Name,[DATE], ID ASC

Мои данные похожи на:

Name    Date        ID

A       3/30/2018   6.26
B       3/31/2018   6.26
C       4/1/2018    7.85
D       4/2/2018    11.88
E       4/3/2018    11.88
F       4/4/2018    9.48

Запрос должен принимать только имена AB и DE.

Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018
SELECT NAME,
       DATE,
       ID
FROM TABLE1
WHERE ID IN (SELECT ID
             FROM TABLE1
             GROUP BY ID
             HAVING COUNT(*) > 1)

выход

NAME    DATE    ID
A   2018-03-30  6.26
B   2018-03-31  6.26
D   2018-04-02  11.88
E   2018-04-03  11.88

Демо

http://sqlfiddle.com/#!18/15edb/1

0 голосов
/ 24 апреля 2018

Вы можете попробовать следующий метод

DECLARE @T TABLE
(
    Nm VARCHAR(50),
    Mydate DATE,
    Id FLOAT
)

INSERT INTO @T
VALUES('A','3/30/2018',6.26),
('B','3/31/2018',6.26),
('C','4/1/2018',7.85),
('D','4/2/2018',11.88),
('E','4/3/2018',11.88),
('F','4/4/2018',9.48)

SELECT
    *
    FROM @T T
       WHERE EXISTS
       (
          SELECT 1 FROM @T WHERE ID = T.Id GROUP BY Id HAVING COUNT(1)>1
       )
0 голосов
/ 24 апреля 2018

Вы можете использовать exists:

select t.*
from t
where exists (select 1
              from t t2
              where t2.id = t.id and
                    t2.date = dateadd(day, -1, t1.date)
             );

Выбирает более позднюю копию. Для более ранней версии используйте 1 вместо -1.

...