Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/85: Рейтинг темы: голосов - 85, средняя оценка - 4.84
Александе еть я
26 / 26 / 6
Регистрация: 15.05.2010
Сообщений: 187
1

Выбор строк по максимальной дате

18.06.2012, 12:39. Просмотров 17068. Ответов 6
Метки нет (Все метки)

подскажите пожалуйста.. мне нужно выбирать из таблицы строки с максимальной датой, но выбирается все...вот мой запрос, который не могу подредачить для своей цели:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SELECT  DISTINCT
LICREGISTER.dbo.MAIN_LEGALPERSON.SHORTNAME,
LICREGISTER.dbo.MAIN_LEGALPERSON.DATEACTUAL,
AISAUFT.dbo.SRO_MEMBERS.EDRPOU,
AISAUFT.dbo.SRO_DOCUMENTS.CAPTION,
LICREGISTER.dbo.MAIN_NEUTRALPERSON.F,
LICREGISTER.dbo.MAIN_NEUTRALPERSON.I,
LICREGISTER.dbo.MAIN_NEUTRALPERSON.O,
LICREGISTER.dbo.MAIN_LEGALPERSON.LEGAL_ADDRESS_CITY
 
FROM AISAUFT.dbo.SRO_MEMBERS
 
LEFT JOIN AISAUFT.dbo.SRO_DOCUMENTS
ON AISAUFT.dbo.SRO_MEMBERS.EDRPOU=AISAUFT.dbo.SRO_DOCUMENTS.EDRPOU
 
LEFT JOIN LICREGISTER.dbo.MAIN_LEGALPERSON
ON LICREGISTER.dbo.MAIN_LEGALPERSON.EDRPOU=AISAUFT.dbo.SRO_MEMBERS.EDRPOU
 
LEFT JOIN LICREGISTER.dbo.MAIN_NEUTRALPERSON
ON LICREGISTER.dbo.MAIN_LEGALPERSON.BOSSPERSON_ID=LICREGISTER.dbo.MAIN_NEUTRALPERSON.INN
 
 
WHERE (AISAUFT.dbo.SRO_MEMBERS.DATEEXCLUDE IS NULL) AND ( AISAUFT.dbo.SRO_DOCUMENTS.ID_DOCUMENTTYPE=1)  --and (LICREGISTER.dbo.MAIN_LEGALPERSON.FULLNAME)
 
ORDER BY AISAUFT.dbo.SRO_DOCUMENTS.CAPTION ASC
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2012, 12:39
Ответы с готовыми решениями:

Выбрать значение по максимальной дате
Доброй ночи, форумчане! Можете помочь разобраться? у меня имеется таблица с полями...

Выборка по максимальной дате для данных - SQL
Есть необходимость сделать запрос, для вывода автомобилей, который нужно пройти техосмотр в...

MS SQL выбор по дате (неплательщиков)
Доброго времени суток! Прошу вашей помощи т.к. уже все перерыл и ничего не нашел :( Задача...

Выбор значения по максимальной дате
Добрый день! Помогите, пожалуйста, написать функцию DLookup. Есть таблица Оклады с полями: -...

Выборка строк по максимальной дате
Всем привет! Есть таблица вида: Широта | Долгота | Транспорт | Дата 1 | 1 | ...

6
iap
918 / 637 / 137
Регистрация: 27.11.2009
Сообщений: 1,913
18.06.2012, 13:03 2
А какое поле с датой? DATEACTUAL?
И где в Вашем запросе попытка выбрать максимальную дату?

Может, так?
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT TOP(1) WITH TIES
 L.SHORTNAME
,L.DATEACTUAL
,M.EDRPOU
,D.CAPTION
,N.F
,N.I
,N.O
,L.LEGAL_ADDRESS_CITY
FROM AISAUFT.dbo.SRO_MEMBERS M
LEFT JOIN AISAUFT.dbo.SRO_DOCUMENTS D ON D.ID_DOCUMENTTYPE=1 AND M.EDRPOU=D.EDRPOU
LEFT JOIN LICREGISTER.dbo.MAIN_LEGALPERSON L ON L.EDRPOU=M.EDRPOU
LEFT JOIN LICREGISTER.dbo.MAIN_NEUTRALPERSON N ON L.BOSSPERSON_ID=N.INN
WHERE M.DATEEXCLUDE IS NULL
ORDER BY L.DATEACTUAL DESC;
Всегда с осторожностью накладывайте ограничения на поля правой таблицы LEFT JOINа в WHERE.
0
Александе еть я
26 / 26 / 6
Регистрация: 15.05.2010
Сообщений: 187
18.06.2012, 13:28  [ТС] 3
да DATEACTUAL мое поле с временем... запроса на выбор максимального нет..если б бы.. не писал бы вам.. такой запрос не работает((
0
iap
918 / 637 / 137
Регистрация: 27.11.2009
Сообщений: 1,913
18.06.2012, 16:31 4
Цитата Сообщение от Александе еть я Посмотреть сообщение
да DATEACTUAL мое поле с временем... запроса на выбор максимального нет..если б бы.. не писал бы вам.. такой запрос не работает((
"не работает" - это такой текст сообщения об ошибке?
Или надо просто отбросить время?
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT TOP(1) WITH TIES
 L.SHORTNAME
,L.DATEACTUAL
,M.EDRPOU
,D.CAPTION
,N.F
,N.I
,N.O
,L.LEGAL_ADDRESS_CITY
FROM AISAUFT.dbo.SRO_MEMBERS M
LEFT JOIN AISAUFT.dbo.SRO_DOCUMENTS D ON D.ID_DOCUMENTTYPE=1 AND M.EDRPOU=D.EDRPOU
LEFT JOIN LICREGISTER.dbo.MAIN_LEGALPERSON L ON L.EDRPOU=M.EDRPOU
LEFT JOIN LICREGISTER.dbo.MAIN_NEUTRALPERSON N ON L.BOSSPERSON_ID=N.INN
WHERE M.DATEEXCLUDE IS NULL
ORDER BY DATEADD(DAY,DATEDIFF(DAY,0,L.DATEACTUAL),0) DESC;
0
Александе еть я
26 / 26 / 6
Регистрация: 15.05.2010
Сообщений: 187
19.06.2012, 14:57  [ТС] 5
не работает- возвращает 4 повторяющихся записи и все((
0
iap
918 / 637 / 137
Регистрация: 27.11.2009
Сообщений: 1,913
19.06.2012, 16:12 6
Цитата Сообщение от Александе еть я Посмотреть сообщение
не работает- возвращает 4 повторяющихся записи и все((
А что должно получиться?
Может, нужны строки не с максимальной по всей таблице датой,
а с максимальными датами по каким-нибудь группам?

В общем, надо уточнять.

Да! И я совсем не смотрел на качество Ваших JOINов. Может, ещё и в них дело.
Ведь ни структура таблиц, ни пример данных в этих таблицах нам неведомы
0
cygapb-007
1309 / 941 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
17.01.2013, 14:50 7
В общем у меня тоже возникла такая же проблема.
В таблице для каждого набора ключей есть куча строк с разными данными.
Надо выдернуть для каждого значения из набора ключей только одну строку, содержащую максимальную дату.
Если максимальных дат несколько, надо выбрать из них строку с минимальным значением другого поля
Если и таких строк несколько, можно взять любую из них, но только одну

Решение такое: взять TOP 1 для каждого ключа в выборке с учетом внутренней сортировки для каждого значения ключей.

Короче - вот:
SQL
1
2
3
4
5
6
7
8
9
SELECT t.*
FROM (
   SELECT 
      ROW_NUMBER() OVER(partition BY myKey1, myKey2 ORDER BY myDate DESC, myAddSort ASC) RowNum,
      *
   FROM myTable
   WHERE myFilter = 1
   ) t
WHERE t.RowNum = 1
Все данные в таблице делятся на секции по одинаковым значениям полей myKey1 и myKey2,
внутри каждой секции строки нумеруются в соответствии с заданным порядком сортировки,
затем из каждой секции берется TOP 1 запись, т.е. та, у которой RowNum = 1
(запись с номером 1 есть в любой секции - то есть ничего не теряется при отсеивании по TOP 1)

Для JOIN легко формируется аналогичная конструкция:
SQL
1
2
3
4
5
6
7
8
SELECT *
FROM headers h
JOIN (
   SELECT 
      ROW_NUMBER() OVER(partition BY key1, key2 ORDER BY myDate DESC) RowNum,
      , *
   FROM details
   ) d ON d.key1=h.key1 AND d.key2=h.key2 AND d.RowNum = 1
0
17.01.2013, 14:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2013, 14:50

Выборка строк по максимальной дате из нескольких таблиц
Здравствуйте! Помогите пожалуйста! Есть три таблицы Имущ (список имущества), СоотвРаспол...

Выделение строк в listbox, выбор условия запроса по дате из формы
И снова Здравствуйте Уважаемые! Есть проблема нет понимания что я делаю не так хочу завязать...

Последнее поле соотв. максимальной дате
Здравствуйте, уважаемые. Очень нужно решить поставленную задачу, которая сейчас работает, но не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru