powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос с интересной выборкой
25 сообщений из 39, страница 1 из 2
Запрос с интересной выборкой
    #39592185
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, помогите реализовать запрос.
Есть таблица с полями FlightNumber, OperationTime, BorderRoutingID, что соответственно Номер авто, время операции и направление движения (въезд или выезд).
Нужно вытащить все номера авто, которые два и более раз подряд выехали и между этими выездами не было въезда.
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592198
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция LAG (или LEAD) вас спасет.
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592199
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k.I.titovЕсть таблица с полями FlightNumber, OperationTime, BorderRoutingID, что соответственно Номер авто, время операции и направление движения (въезд или выезд).
Нужно вытащить все номера авто, которые два и более раз подряд выехали и между этими выездами не было въезда.Хм, запрос то простой, учебная задача?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select *
from [Есть таблица] as t1
    cross apply (
        select top 1 *
        from [Есть таблица] as t2
        where t2.FlightNumber = t1.FlightNumber
                and t2.OperationTime > t1.OperationTime
        order by t2.OperationTime ASC
    ) as t2
where t1.BorderRoutingID = Выехали
    and t2.BorderRoutingID = Выехали
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592206
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас попробую. Нет не учеба, на работе) sql запросам не обучался, но начальник задачи ставит. Большую часть в состоянии выполнить, в большинстве случаев перевожу все нужные данные в отдельные временые таблицыи их, сравниваю, а тут так не выходит...
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592207
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,
Тут еще нужно учесть что было два выезда подряд, без въезда... и задать промежуток времени, так как база у меня в сотни миллионов таких машин и если без ограничения по времени запущу, повешу базу. Еще добавил with (nolock)
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592211
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока так
use packdb
Select * from spk_Vpassenger_WithoutMV as t2 with (nolock)
Where t2.FlightNumber = t1.FlightNumber and t2.OperationTime>t1.OperationTime order by t2.OperationTime ASC)
as t2 where t1.OperationTime >'2018-01-27 17:00:00.000' and t2.OperationTime>'2018-01-27 17:00:00.000' and t1.BorderCrossingID =1 and t2.BorderCrossingID =2
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592213
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На выходе пустой результат...
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592214
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Убрал время в конце, так же пустой результат
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592218
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибочка,как вот так сейчас
use packdb
Select * from spk_Vpassenger_WithoutMV as t1 with (nolock)
cross apply (select top 1 * from spk_Vpassenger_WithoutMV as t2 with (nolock) where t2.FlightNumber = t1.FlightNumber and t2.OperationTime>t1.OperationTime order by t2.OperationTime ASC)
as t2 where t1.OperationTime >'2018-01-27 17:00:00.000' and t2.OperationTime>'2018-01-27 17:00:00.000' and t1.BorderCrossingID =1 and t2.BorderCrossingID =2
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592222
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k.I.titovalexeyvg,
Тут еще нужно учесть что было два выезда подряд, без въезда... и задать промежуток времени, так как база у меня в сотни миллионов таких машин и если без ограничения по времени запущу, повешу базу. Еще добавил with (nolock)Мой запрос как раз показывает 2 выезда подряд, без въезда.
Промежуток времени можно задать, добавив условие для таблицы t1
Скорость будет зависеть от наличия правильного индекса и от указанного диапазона, и не будет зависеть от того, сколько всего миллиардов записей в таблице.
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592224
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо. Буду пробовать уже в понедельник, спасибо за помощь)
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592226
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k.I.titovОшибочка,как вот так сейчасДа, в общем правильно.
Единственно, условие t2.OperationTime > ... лишнее, запутает сервер и вас.
Для скорости лучше сделать индекс по FlightNumber asc, OperationTime desc
И ещё один фильтрованный по OperationTime asc where BorderCrossingID = 1
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592633
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,
Сейчас на работе, выполняю так каки указано выше, убрал t2.operationtime, и все равно результат нулевой... убираю время совсем, все равно результат ноль....
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592636
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Я понял... я не совсем точно объяснил. В этой таблице содержится много машин и мне нападет найти такие которые два раза подряд выехали, но между ними сможет бывать уйма машин. Если я правильно понимаю принцип работы этого запроса, то он сравнивает каждую строку со следующей, по этому и результат ноль. А мне нужно, что бы он нашел два номера с направлением въезд без выезда между ними, с учетом того, что между этими выездами может пройти любое время
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592638
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь за опечатки, печатаю с телефона
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592640
k.I.titov,

ну так и сравнивай машину с самой собой в подзапросе.... а не со всему имеющимися в таблице
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592650
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

А как это реализовать?
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592661
petre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
k.I.titov,

В запросе уже сравнивается машина сама с собой:
Код: sql
1.
t2.FlightNumber = t1.FlightNumber


Только не понятно что за поля:
Код: sql
1.
t1.BorderCrossingID =1 and t2.BorderCrossingID =2

?
В начале ведь говорилось о направлении движения BorderRoutingID
Если BorderCrossingID так же определяет направление движения, то необходимо чтобы t1.BorderCrossingID и t2.BorderCrossingID были одинаковы и определяли событие выезда.
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592665
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petre,

Я попутал... верно borderroutingid, 1 выезд 2 въезд
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592666
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petre,
И у себя в sql так же опечатался.... Сейчас проверяю.
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592674
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petre,

Запустил, результат есть, но проверка показала что номера которые есть в результате, то есть машины въезжали между выездами...
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592675
k.I.titov,

так можно долго "тыкать пальцем в небо"....
приводи репрезентативный юзабильный набор тестовых данных, свой вариант запроса и "проблемные" данные, которые твой запрос отрабатывает не так, как ты того ожидал....
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592676
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть он выдает просто номера, которые имеют два выезда вне зависимости от наличия въезда
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592683
k.I.titov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эхk.I.titov,

так можно долго "тыкать пальцем в небо"....
приводи репрезентативный юзабильный набор тестовых данных, свой вариант запроса и "проблемные" данные, которые твой запрос отрабатывает не так, как ты того ожидал....
Я мог бы с радостью это сделать, но с на это можно. Попробую так объяснить. Грубо говоря в таблице три записи все трис номером А 111 А 123, время у первой записи 2018.01.01 10:00:00.000, у второй 2018.01.01 11:00:00.000, у третьей 2018.01.01 12:00:00.00, направление соответственно выезд, въезд и выезд то, есть 1,2,1. Запустив этот запрос он увидит что номер А 111 А 123 выехал два раза и выдаст его в результате, не учитывая того, что между ними был въезд. А мне нужно так, что бы он выдал его только при таком раскладе, если у них будет последовательность направлений 1,1,2 соответственно выезд, выезд и въезд
...
Рейтинг: 0 / 0
Запрос с интересной выборкой
    #39592689
k.I.titov,

ну, на нет - и суда нет. Тогда можно лишь сказать, что ошибка в 17-й строке. А правильный ответ - 42...
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос с интересной выборкой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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