Получение самой старой записи из SQL Server с использованием T-SQL - PullRequest
0 голосов
/ 03 октября 2019

У меня есть запрос T-SQL, где мне нужно найти самую старую запись даты. Я написал это так:

SELECT
    T0.ItemCode, T0.OpenQty AS 'Qty', MIN(T1.DocDate) AS 'DocDate', 
    T1.DocNum, T1.CardCode, T1.SlpCode AS 'Sales Person', T0.WhsCode
FROM
    RDR1 T0
INNER JOIN
    ORDR T1 ON T0.DocEntry = T1.DocEntry
WHERE 
    T0.linestatus = 'O'
GROUP BY 
    T0.ItemCode, T0.OpenQty , T1.DocNum, T1.CardCode, T1.SlpCode , T0.WhsCode

, но он не возвращает самую старую запись даты.

На этом снимке экрана показаны данные:

enter image description here

Ответы [ 2 ]

3 голосов
/ 03 октября 2019

Вы можете использовать ROW_NUMBER() для ранжирования записей по возрастанию T1.DocDate во внутреннем запросе, а затем выбрать самый старый во внешнем запросе:

Select *
From (
    Select  
        T0.ItemCode, 
        T0.OpenQty as 'Qty', 
        T1.DocDate,
        T1.DocNum, 
        T1.CardCode, 
        T1.SlpCode as 'Sales Person', 
        T0.WhsCode,
        Row_Number() Over(Order By T1.DocDate) rn
    From RDR1 T0
    Inner Join ORDR T1 on T0.DocEntry = T1.DocEntry
    Where T0.linestatus = 'O'
) x
Where rn = 1

Это даст вам самую старую запись вТаблица. Если вам нужно получить самую старую запись для каждой группы, вы можете добавить предложение PARTITION BY к функции ROW_NUMBER().

Примечание: здесь также предполагается, что T1.DocDate относится к типу данных, похожему на дату, что, кажется, (и должно быть) имело место при рассмотрении ваших данных выборки.

2 голосов
/ 03 октября 2019

Почему ты пишешь Self join? Если вам нужно получить 10 самых старых записей из таблицы, то просто отсортируйте таблицу по дате в порядке возрастания и перечислите первые 10 строк.

Например -

Select  top 10 T0.ItemCode, T0.OpenQty as 'Qty', T1.DocDate as 'DocDate', T1.DocNum, T1.CardCode, T1.SlpCode as 'Sales Person', T0.WhsCode
From RDR1 T0
Where T0.linestatus = 'O'
order by T1.DocDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...