powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать данные по последней дате
9 сообщений из 9, страница 1 из 1
Выбрать данные по последней дате
    #39839198
alexander.se
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
есть таблица с такой структурой:

CreditID GraphicID PayDate




нужно выбрать данные по послед
...
Рейтинг: 0 / 0
Выбрать данные по последней дате
    #39839201
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что у вас не получается?
...
Рейтинг: 0 / 0
Выбрать данные по последней дате
    #39839211
alexander.se
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,

Не дописал тему, enter'ом отступы далал и она почему-то опубликовалась(


CreditID GraphicID PayDate
---------------------------------------
1------------1-----------2019-01-01
1------------1-----------2019-02-01
1------------2-----------2019-01-02
1------------2-----------2019-02-02

Нужно нужно выбрать последние даты выплат(PayDate) по последнему графику(GraphicID) для каждого CreditID

Написал такой запрос, но такой запрос выбирает последнюю дату по каждому GraphicID а не по последнему
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT DISTINCT
	 CreditID,
     MAX(PayDate),
	 GraphicID
FROM Credits.Graphics
	  GROUP BY CreditID, GraphicID
HAVING GraphicID = MAX(GraphicID)
ORDER BY CreditID ASC 
...
Рейтинг: 0 / 0
Выбрать данные по последней дате
    #39839226
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexander.seпо последнему графику(GraphicID)Что такое "последний график" В Вашем понимании? график, минимальная дата которого максимальна?
...
Рейтинг: 0 / 0
Выбрать данные по последней дате
    #39839249
alexander.se
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Грубо говоря по максимальному GraphicID. В "таблице" которую я привел там как бы два графика, 1 и 2
...
Рейтинг: 0 / 0
Выбрать данные по последней дате
    #39839256
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH cte AS (
SELECT CreditID, 
       GraphicID, 
       PayDate, 
       RANK() OVER (PARTITION BY CreditID ORDER BY GraphicID DESC) r1,
       RANK() OVER (PARTITION BY CreditID, GraphicID ORDER BY PayDate DESC) r2
)
SELECT CreditID, 
       GraphicID, 
       PayDate
FROM cte
WHERE r1=1 
  AND r2=1


?
...
Рейтинг: 0 / 0
Выбрать данные по последней дате
    #39839271
alexander.se
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaЧто-то типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH cte AS (
SELECT CreditID, 
       GraphicID, 
       PayDate, 
       RANK() OVER (PARTITION BY CreditID ORDER BY GraphicID DESC) r1,
       RANK() OVER (PARTITION BY CreditID, GraphicID ORDER BY PayDate DESC) r2
)
SELECT CreditID, 
       GraphicID, 
       PayDate
FROM cte
WHERE r1=1 
  AND r2=1


?

Кажись да, а можете подробнее объяснить как это "RANK() OVER (PARTITION BY CreditID ORDER BY GraphicID DESC) r1" работает?
...
Рейтинг: 0 / 0
Выбрать данные по последней дате
    #39839287
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexander.seкак это "RANK() OVER (PARTITION BY CreditID ORDER BY GraphicID DESC) r1" работает?
Берётся группа записей с совпадающим CreditID. Сортируется по убыванию GraphicID. После чего данному выражению присваивается значение минимального порядкового номера той записи в группе, которое имеет то же GraphicID, что и текущая запись. Применительно к показанным данным - группа одна (CreditID=1), и сортировка/нумерация в ней будет такой:
CreditIDGraphicIDPayDateНомер записиМин.номер записи с тем же GraphicID aka RANK()122019-01-0211122019-02-0221112019-01-0133112019-02-0143
Записи внутри подгруппы могут располагаться произвольным образом (1 и 2 могут поменяться местами, равно как и 3 и 4), на результат это не влияет.
...
Рейтинг: 0 / 0
Выбрать данные по последней дате
    #39839342
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexander.seКажись да, а можете подробнее объяснить как это "RANK() OVER (PARTITION BY CreditID ORDER BY GraphicID DESC) r1" работает?Неужели можно объяснить понятнее и быстрее, чем в хелпе?

Вот тут приведён пример применения всех ранжирующих функций, по моему, это очень наглядно и понятно: https://docs.microsoft.com/ru-ru/sql/t-sql/functions/ranking-functions-transact-sql
А тут конкретно про RANK: https://docs.microsoft.com/ru-ru/sql/t-sql/functions/rank-transact-sql
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать данные по последней дате
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]