Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
Попробуйте вот такой вариант: Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 14:25 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
k.I.titov, Ответы не пробовали читать? Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 14:43 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
k.I.titovpetre, Запустил, результат есть, но проверка показала что номера которые есть в результате, то есть машины въезжали между выездами...Дык покажите запрос то. Я вам дал правильный готовый запрос сразу же, а у вас там появляются какие то "t1.BorderCrossingID =1 and t2.BorderCrossingID =2" 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 соответственно выезд, выезд и въездДа поняли все задачу. Мой запрос как раз учитывает, что между двумя выездами не должно быть въездов. Вы очевидно что то напутали в запросе. Покажите же его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 15:11 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
alexeyvg, искал похожую тему и наткнулся на Ваш запрос. Возник вопрос - в какой части Вашего запроса исключается въезд между выездами? Насколько я понимаю оператор cross apply выполняет соединение двух таблиц, при этом каждая строка из левой таблицы сочетается с каждой строкой из правой. Если не трудно, поясните, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2019, 19:03 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
masql60alexeyvg, искал похожую тему и наткнулся на Ваш запрос. Возник вопрос - в какой части Вашего запроса исключается въезд между выездами? Насколько я понимаю оператор cross apply выполняет соединение двух таблиц, при этом каждая строка из левой таблицы сочетается с каждой строкой из правой. Если не трудно, поясните, пожалуйста.Ну, тут лучше не говорить в терминах "соединение", "левой", "правой". Я от этой математики сразу тупею :-) Рассмотрим запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Логически (не будем вдаваться, как его выполняет сервер), он для каждой записи, у которой тип "Выехали", ищет ближайшую к ней (по OperationTime) запись, причём с любыми типами BorderRoutingID. И просто выводит список. А потом мы, добавляя условие "t2.BorderRoutingID = Выехали", оставляем из результата только те пары записей, в которых вторая запись будет типа Выехали Соответсвенно, въезд между выездами исключается как раз вот этим дополнительным условием. Вот если бы условие "t2.BorderRoutingID = Выехали" я поставил внутри cross apply, то я просто нашёл бы для каждой строки ближайшую к ней запись "Выехали", независимо от того, если ли какие то другие записи между ними, или нет. А вот когда я фильтрую снаружи , то уже фильтрую общий результат. Единственно, замечу, что для реального применения нужно ещё внутрь добавить условие "t2.BorderRoutingID in ( Выехали, Въехали )", потому что там, наверное, будут другие операции, которые будут искажать результат. Потому что, по сути, мой изначальный запрос не как у автора "Нужно вытащить все номера авто, которые два и более раз подряд выехали и между этими выездами не было въезда.", а "все номера авто, для которых после выезда сразу следует ещё один выезд", а это не одно и то же. Итого, получается так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2019, 19:37 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
alexeyvg, спасибо за пояснение. Я не учел то, что условие задаете вне оператора cross apply. Обрисую свою ситуацию. Есть две таблицы personal и operations. Таблица personal состоит из столбцов Id и FIO, таблица operations - Id, OperationName, OperationDate, FIOId. Из таблицы personal я вытягиваю FIO, из таблицы operations - OperationDate, OperationName, использую оператор left join при объединении. Так вот мне требуется выбрать только те записи, которые подпадают под следующее условие - сотрудник дважды вышел, но не входил. Приведу пример: Иванов Иван Иванович Вход 01.01.2017 10:00 Петров Петр Петрович Вход 01.01.2017 10:05 Иванов Иван Иванович Выход 01.01.2017 13:00 Петров Петр Петрович Выход 01.01.2017 13:05 Петров Петр Петрович Вход 01.01.2017 14:00 Иванов Иван Иванович Выход 01.01.2017 18:00 Петров Петр Петрович Выход 01.01.2017 18:05 На выходе я хочу получить: Иванов Иван Иванович Выход 01.01.2017 13:00 Иванов Иван Иванович Выход 01.01.2017 18:00 Использую Ваш запрос. Вот что получилось: SELECT p.FIO, o.OperationName, o.OperationDate FROM personal AS p LEFT JOIN operations AS o ON p.Id = o.FIOId CROSS APPLY (SELECT TOP 1 p2.FIO, o2.OperationName, o2.OperationDate FROM personal AS p2 LEFT JOIN operations AS o2 ON p2.Id = o2.FIOId WHERE o2.OperationDate > o.OperatinDate AND p2.FIOId = p.FIOId ORDER BY o2.OperationDate ASC) AS t2 WHERE o.OperationName = 'Выход' AND t2.OperationName = 'Выход' AND o.OperatinDate BETWEEN '01.01.2017 00:00' AND '01.01.2017 23:59' Получаю все записи с выходом. Помогите, пожалуста, разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 09:30 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
masql60, Пожалуйста, форматируйте текст хоть как-нибудь, а то прям аж кровь из глаз )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 09:56 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
zby, я извиняюсь за неудобство. Пишу с телефона, не судите строго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 10:03 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
masql60Помогите, пожалуста, разобраться.ИМХО вы напутали с Id и FIOId И вообще, запрос нужно упростить, вместо первого LEFT JOIN достаточно JOIN, а в CROSS APPLY вообще достаточно одной таблицы. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2019, 23:18 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
alexeyvg, согласен с Вами, что объединение во встроенном запросе лишнее. Но что я напутал? Я так и не заметил разницы, помимо того, что Вы исключили одно объединение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2019, 18:11 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
Если вы имеете это - WHERE o2.OperationDate > o.OperatinDate AND p2.FIOId = p.FIOId, то это моя опечатка с телефона. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2019, 18:15 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
masql60Если вы имеете это - WHERE o2.OperationDate > o.OperatinDate AND p2.FIOId = p.FIOId, то это моя опечатка с телефона.Да, имею в виду это. Ну, что можно сказать? Когда будете у компа, запостьте сюда скрипт создания ваших таблиц, с вашими тестовыми данными "Иванов Иван Иванович Вход 01.01.2017 10:00" и т.п., отладим ваш запрос. Благо скрипт можно получить в SSMS, а тестовые данные вы уже тут запостили, так что это несложно. А то получается "лечение по пересказу", мало ли, что вы в телефоне набрали, может, там ещё есть какое то отличие в запросе, достаточно ведь не там скобку поставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2019, 23:33 |
|
||
|
Запрос с интересной выборкой
|
|||
|---|---|---|---|
|
#18+
alexeyvg, да, я прекрасно Вас понимаю. Тогда я в понедельник создам тестовую базу, и отправлю результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2019, 12:04 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39770811&tid=1688312]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 412ms |

| 0 / 0 |
