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

Откуда:
Сообщений: 57
Всем привет!
Умею писать запросы более-менее простенькие. Но тут возникла необходимость сделать следующие 2 задачи:
1) Есть таблица с полями ID (уникальное), Date, Name. Необходимо выбрать только те записи, которые были в промежутке date1-date2 и при этом во всей таблице с таким Name должна быть только одна запись;
2) Выбрать из той же таблицы только последние по Date (или по ID) записи.

Заранее благодарен за подсказку
28 май 15, 14:18    [17701520]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
zasandator
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 4887
Laroux,

select top(1) ... with ties
...
order by row_number() over (partition by Name order by ID) desc
28 май 15, 14:26    [17701570]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Laroux,

1)
select ID, Date, Name
from таблица t1
where Date between @date1 and @date2
and not exists (select 1 from таблица t2 where t1.Name = t2.Name and t1.ID <> t2.ID)


2)
with t1
as (select ID, Date, Name, row_number() over (partition by Name order by Date desc) as rn--или order by ID desc
from таблица
)
select ID, Date, Name
from t1
where rn = 1
28 май 15, 14:27    [17701579]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
Laroux
Member

Откуда:
Сообщений: 57
О, спасибо, ребят..

А можно вопросик? я не понял конструкции select 1 from таблица t2 where t1.Name = t2.Name and t1.ID <> t2.ID

что за "1"?
28 май 15, 14:34    [17701633]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10232
Блог
Laroux
что за "1"?


можно так:

select ID, Date, Name
from таблица t1
where Date between @date1 and @date2
and not exists (select 1/0 from таблица t2 where t1.Name = t2.Name and t1.ID <> t2.ID)
28 май 15, 14:38    [17701659]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
Laroux
что за "1"?

1 - это число 1
28 май 15, 14:38    [17701663]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
Laroux
Member

Откуда:
Сообщений: 57
Glory
Laroux
что за "1"?

1 - это число 1
зачет))

Но все равно непонятно.. может ткнёте куда почитать, чтобы разобраться?
28 май 15, 14:45    [17701707]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
Laroux
Но все равно непонятно.

Вам непонятно, что такое "число" ?
28 май 15, 14:46    [17701714]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
Laroux
Member

Откуда:
Сообщений: 57
Glory, мне непонятна конструкция not exists (select 1 from таблица t2 where t1.Name = t2.Name and t1.ID <> t2.ID)

причем тут 1 (или 1/0)?
28 май 15, 14:47    [17701722]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Laroux, ну так почитайте про not exists.
Что там писать в select внутри этой конструкции - не очень важно.

https://msdn.microsoft.com/en-us/library/ms188336.aspx
28 май 15, 14:49    [17701743]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10232
Блог
Laroux
причем тут 1 (или 1/0)?

вот как раз ни при чём(!!!) именно это я вам и пытался показать конструкцией 1/0
28 май 15, 14:49    [17701744]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
Glory
Member

Откуда:
Сообщений: 104751
Laroux
Glory, мне непонятна конструкция not exists (select 1 from таблица t2 where t1.Name = t2.Name and t1.ID <> t2.ID)

Наверное тогда самое время обратится к учебной литературе, где объясняется, что такое select, из чего он состоит и тп

Laroux
причем тут 1 (или 1/0)?

Ну если вам не нравится 1, то напишите туда 100 или 666 или еще что-нибудь
28 май 15, 14:51    [17701748]     Ответить | Цитировать Сообщить модератору
 Re: выборка последних и уникальных записей  [new]
edyaN
Member

Откуда:
Сообщений: 185
Laroux
О, спасибо, ребят..

А можно вопросик? я не понял конструкции select 1 from таблица t2 where t1.Name = t2.Name and t1.ID <> t2.ID

что за "1"?


в данном контексте 1 это просто наполнитель или псевдооптимизация. Смело заменяйте на звездочку.
28 май 15, 19:06    [17703551]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить