Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка максимальной даты  [new]
woodgoblin
Member

Откуда: Москва
Сообщений: 6
Добрый день!
Помогите пожалуйста сделать запрос.
Есть таблица.
No (varchar)
Ending date (date)

В записи таблице могут быть:
353913, 2015-01-01
353913, 2015-10-01
984278, 2015-15-00
984278, 1753-01-01

Необходимо сделать выборку по максимальной дате, но если в значениях есть пустая дата (1753-01-01) то выводить ее.
Обычную выборку на поиск максимальной даты сделал, но вот как прописать что если есть пустая дата и выводить ее. Вот тут затуп.

select no, MAX([Ending Date]) from table
group by no
20 окт 15, 11:43    [18301507]     Ответить | Цитировать Сообщить модератору
 Re: Выборка максимальной даты  [new]
Glory
Member

Откуда:
Сообщений: 104751
woodgoblin
но если в значениях есть пустая дата (1753-01-01)

Это не пустая дата

woodgoblin
но вот как прописать что если есть пустая дата и выводить ее.

Использовать CASE внутри MAX
20 окт 15, 11:45    [18301532]     Ответить | Цитировать Сообщить модератору
 Re: Выборка максимальной даты  [new]
o-o
Guest
declare @t table (
No varchar(100),
[Ending date] date)

insert @t values
('353913', '20150101'),
('353913', '20150110'),
('984278', '20150115'),
('984278', '17530101')

select no, case MIN([Ending Date]) 
                when '17530101' then '17530101' 
                else MAX([Ending Date]) end as dt 
from @t
group by no 

это если гарантированно нет дат меньше 17530101.
20 окт 15, 12:31    [18301944]     Ответить | Цитировать Сообщить модератору
 Re: Выборка максимальной даты  [new]
o-o
Guest
а вот так с любыми датами,
если точно нет даты 00010101
declare @t table (
No varchar(100),
[Ending date] date)

insert @t values
('353913', '20150101'),
('353913', '20150110'),
('353913', '15000101'),
('984278', '20150115'),
('984278', '17530101'),
('984278', '15000101');


with cte as
(
select no,
       case [Ending date] 
          when '17530101' then '00010101'
          else [Ending date] 
       end [Ending date]    
from @t
)

select no, case MIN([Ending Date]) 
                when '00010101' then '17530101' 
                else MAX([Ending Date]) end as dt 
from cte
group by no 
20 окт 15, 12:38    [18302007]     Ответить | Цитировать Сообщить модератору
 Re: Выборка максимальной даты  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21242
SELECT TOP 1 
  --WITH TIES 
*
FROM @table
ORDER BY CASE WHEN [Ending Date] < '19000101' THEN 0 ELSE 1 END ASC, [Ending Date] DESC
20 окт 15, 12:48    [18302084]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить