Как различать значения в нескольких столбцах в SQL - PullRequest
1 голос
/ 28 апреля 2019

Я использую SQL и у меня есть таблица со столбцами Tz, Suma, Erzor, CreateDate (DateTime) и еще несколько.

Я хочу взять все столбцы, упомянутые выше, для конкретного идентификатора пользователя, отличного от CreateDate, также я хочу различить Suma и Erzor. Проблема в том, что из-за разнообразия значений CreateDate я получаю результат, отличный от ожидаемого.

Мой запрос находится в хранимой процедуре, которая получает @Tz (rn) в качестве входного параметра, который выглядит следующим образом (на основании проведенного мной исследования Google):

SELECT 
    Suma,
    Ezror,
    DateCreate
FROM
    (SELECT 
         Suma,
         Erzor,
         DateCreate,
         ROW_NUMBER() OVER (PARTITION BY DateCreate ORDER BY Suma) rn
     FROM 
         UsrHist) t
WHERE 
    rn = 956321478

Таким образом, если для вышеупомянутого rn (@Tz) продублировано Suma и Ezror, уменьшите до 1 и получите из него самую последнюю DateCreate и упорядочите по ней desc., Также получите все поля для этой записи, и возьми последний (верхний) 10.

Эти данные:

Tz          Suma     Erzor    DateCreate
-------------------------------------------------------
956321478   7785     30       26-04-2019 13:40:15.563
956321478   7785     30       26-04-2019 13:45:30.785
956321478   7785     50       26-04-2019 12:45:30.152
956321478   7785     50       25-04-2019 16:43:10.652
956321478   7785     10       26-04-2019 13:55:18.752
956321478   7785     90       26-04-2019 12:51:50.359
956321478   7785     60       25-04-2019 19:32:20.715

Результат должен быть:

Tz          Suma     Erzor    DateCreate
-----------------------------------------------------
956321478   7785     30       26-04-2019 13:45:30.785
956321478   7785     50       26-04-2019 16:43:10.652
956321478   7785     10       26-04-2019 13:55:18.752
956321478   7785     90       26-04-2019 12:51:50.359
956321478   7785     60       25-04-2019 19:32:20.715

Я не против времени, хотя важна дата

1 Ответ

1 голос
/ 28 апреля 2019

Похоже, что раздел и порядок для row_number могут быть изменены.
Затем ограничьте номер строки.

SELECT TOP 10 Suma, Ezror, DateCreate
FROM
(
    SELECT Tz, Suma, Erzor, DateCreate,
     Row_number() OVER(PARTITION BY Tz, Suma, Ezror ORDER BY DateCreate DESC) AS rn
    FROM UsrHist
    WHERE Tz = 956321478
) q
WHERE rn = 1
ORDER BY DateCreate DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...