Как выбрать самые последние 8 строк из таблицы для уникальных серийных номеров в таблице - PullRequest
1 голос
/ 04 июля 2019

Я создал автоматизированный графический интерфейс с использованием labview, который тестирует наши 8-канальные устройства.Каждый раз, когда тест завершается, 8 строк автоматически добавляются в таблицу SQL Server, и во всех этих 8 строках записывается один и тот же серийный номер.Каждый раз, когда проводится проверка, добавляется 8 строк независимо от того, был ли этот серийный номер уже проверен.То, что я хочу сделать, это получить самые последние данные (всегда 8 строк) для всех уникальных серийных номеров.

До сих пор я был в состоянии сделать это только для однострочных тестов с использованием следующего кода:

 SELECT TestIndex 
 FROM dbo.TROSA_101_InitialTestingLD_AsicLpTest_CH
 WHERE TestIndex IN (SELECT MAX(TestIndex) FROM dbo.TROSA_101_InitialTestingLD_AsicLpTest_CH GROUP BY SerialNumber)

По сути, я просто хочу удалить дублирующиеся наборы из 8 строк данных (каждая соответствует одному тесту) или другими словами получить последние 8 строк для каждого уникального значения SerialNumber.

1 Ответ

0 голосов
/ 04 июля 2019

Я не совсем следую вашей бизнес-логике, но требование в последнем предложении вашего вопроса легко найти с помощью ROW_NUMBER:

SELECT *
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY SerialNumber ORDER BY TestIndex DESC) rn
    FROM dbo.TROSA_101_InitialTestingLD_AsicLpTest_CH
) t
WHERE rn <= 8;

Приведенный выше запрос вернет 8 самых последних записей для каждого серийного номера, причем «недавние» ссылаются на наибольшее значение TestIndex.

...