Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос, похожий на DISTINCT / 20 сообщений из 20, страница 1 из 1
17.07.2018, 10:36
    #39674862
Igorgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
Здравствуйте. Помогите сформировать запрос (mssql).Можно с cte.

Есть данные:
UC1 did TripID ObjectID BeginDate parent
39 44060 353 6616 2018-07-15 11:00:28.000 1
39 44071 353 6616 2018-07-15 11:00:28.000 0

...


Надо выбрать так,чтобы если в parent была 1, выбирались записи по 1, 0 не включали,
а если 1 в parent нет, то выбирались по 0.
То есть, как бы аналог DISTINCT, но c полем did.

Спасибо.
...
Рейтинг: 0 / 0
17.07.2018, 10:39
    #39674863
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
ваш то вариант каков ?
...
Рейтинг: 0 / 0
17.07.2018, 10:45
    #39674873
Igorgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
сейчас по cte решаю
...
Рейтинг: 0 / 0
17.07.2018, 10:52
    #39674876
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
"Выбрать уникальные записи по полю DID
Если parent = 1, то выбрать эту запись
Если не стоит, то выбрать с parent = 0
Так?"

Вопросы:
Какую запись выбрать,
Если есть несколько полей с одинаковым DID и parent = 1
Если есть несколько полей с одинаковым DID и parent = 0 при отсутствии parent = 1 с этим DID
...
Рейтинг: 0 / 0
17.07.2018, 10:55
    #39674881
Igorgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
Да, так.
Если есть несколько полей с одинаковым DID и parent = 1 - выбираем любую одну, но она будет всегда одна.
Если есть несколько полей с одинаковым DID и parent = 0 при отсутствии parent = 1 с этим DID - выбираем любую одну
...
Рейтинг: 0 / 0
17.07.2018, 10:57
    #39674883
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
row_number() over (partition by did order by parent desc) as RN

where RN = 1
...
Рейтинг: 0 / 0
17.07.2018, 11:02
    #39674885
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
IgorggНадо выбрать так,чтобы если в parent была 1, выбирались записи по 1, 0 не включали,
а если 1 в parent нет, то выбирались по 0.row_number() over (partition by UC1, TripID, ObjectID, BeginDate order by parent desc) = 1

В виде запроса оформите самостоятельно.
...
Рейтинг: 0 / 0
17.07.2018, 11:04
    #39674889
Igorgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
Спасибо
...
Рейтинг: 0 / 0
17.07.2018, 11:41
    #39674918
Igorgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
Еще раз спасибо.
C cte все работает.

with cte as (Select *,row_number() over (partition by TripID, ObjectID, BeginDate order by parent desc) as RN from a)
Select * from сte
where RN = 1
order by TripID,ObjectID,BeginDate desc,parent desc

Можно ли этот запрос без cte реализовать?
...
Рейтинг: 0 / 0
17.07.2018, 11:46
    #39674927
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
Igorgg,
можно и без СТЕ

Код: sql
1.
2.
3.
4.
5.
SELECT * FROM
(
  Select *,row_number() over (partition by TripID, ObjectID, BeginDate order by parent desc) as RN from a
)X
WHERE X.RN=1
...
Рейтинг: 0 / 0
17.07.2018, 11:47
    #39674928
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
IgorggМожно ли этот запрос без cte реализовать?Аллергия?
CTE это синтаксический сахар для derived table . См. пример И
...
Рейтинг: 0 / 0
17.07.2018, 11:48
    #39674931
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
Igorgg,

cte мешает психологически?

что-то вроде
Код: sql
1.
2.
3.
4.
Select TOP 1 WITH TIES	*
from сte
where RN = 1
order by row_number() over (partition by TripID, ObjectID, BeginDate order by parent desc) as RN from a)
...
Рейтинг: 0 / 0
17.07.2018, 11:50
    #39674932
Igorgg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
спасибо
...
Рейтинг: 0 / 0
17.07.2018, 11:51
    #39674933
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
IgorggМожно ли этот запрос без cte реализовать?

Код: sql
1.
2.
3.
Select top 1 with ties * 
from a
order by row_number() over (partition by TripID, ObjectID, BeginDate order by parent desc)
...
Рейтинг: 0 / 0
17.07.2018, 12:43
    #39674969
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
Minamoto
Код: sql
1.
2.
3.
Select top 1 with ties * 
from a
order by row_number() over (partition by TripID, ObjectID, BeginDate order by parent desc)

Не учите плохому.
...
Рейтинг: 0 / 0
17.07.2018, 13:12
    #39675004
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
Igorgg,

во избежание сортировок при запросе необходимо разделить данные на две таблицы по parent.
...
Рейтинг: 0 / 0
17.07.2018, 15:20
    #39675106
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
invm, и чего же в этом плохого?
...
Рейтинг: 0 / 0
17.07.2018, 15:47
    #39675122
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
Minamotoinvm, и чего же в этом плохого?Предложенный вами вариант дает в плане выполнения гарантированную неубираемую сортировку по результатам row_number().
...
Рейтинг: 0 / 0
17.07.2018, 16:16
    #39675138
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
invm,
оффтоп
для страху надо
гарантированную неубираемую губительную и беспощадную сортировку
...
Рейтинг: 0 / 0
17.07.2018, 17:09
    #39675180
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос, похожий на DISTINCT
invmMinamotoinvm, и чего же в этом плохого?Предложенный вами вариант дает в плане выполнения гарантированную неубираемую сортировку по результатам row_number().
Еще одну причину не написали: Он не дает возможности сортировать результат в самом запросе - сортировку можно добавить, только обернув код либо в тот же CTE, либо в подзапрос.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос, похожий на DISTINCT / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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