SQL-запрос для фильтрации повторяющихся строк столбца по минимальному DateTime этих соответствующих строк - PullRequest
0 голосов
/ 15 января 2019

У меня есть таблица базы данных SQL, «Helium_Test_Data», в которой есть несколько записей на основе столбца KeyID (KeyID представляет одну протестированную деталь). Мне нужно запросить записи и показать только одну запись на KeyID (часть) на основе самой ранней даты-времени создания (пример формата: 2018-12-29 08: 22: 11.123). Это потому, что одна и та же часть была протестирована несколько раз, но мне нужно использовать первое чтение. Вот запрос, в настоящее время пробовал:

SELECT mt.*
FROM Helium_Test_Data mt
INNER JOIN
(
    SELECT 
          KeyID, 
          MIN(DateTime) AS DateTime
      FROM Helium_Test_Data
      WHERE PSNo='11166565'
      GROUP BY KeyID
) t ON mt.KeyID = t.KeyID AND mt.DateTime = t.DateTime
  WHERE PSNo='11167197' 
  AND (mt.DateTime > '2018-12-29 07:00') 
  AND (mt.DateTime < '2018-12-29 18:00') AND OK=1 
  ORDER BY KeyId,DateTime

Возвращает только те строки, в которых нет дубликатов KeyID, присутствующих в таблице, в то время как мне нужна одна строка на каждый KeyID (дубликат или нет). А для дубликатов мне нужна самая ранняя дата.

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 15 января 2019

использовать row_number() оконную функцию, которая поддерживает большинство дБмс

select * from 
(
 select *,row_number() over(partition by KeyID order by DateTime) rn
from Helium_Test_Data
) t where t.rn=1

или вы можете использовать коррелированный подзапрос

select t1.* from Helium_Test_Data t1
where t1.DateTime= (select min(DateTime)
                   from Helium_Test_Data t2
                    where t2.KeyID=t1.KeyID
                   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...