|
for select into do select
|
|||
---|---|---|---|
#18+
Подскажите пожалуйста как мне реализовать запрос. В таблице есть поля с датой документа и датой выгрузки. Даты в них могут быть разные для каждой записи. Нужно для вчерашней даты выгрузки сформировать реестр документов по датам. Такой запрос работает очень долго Код: plsql 1. 2. 3. 4. 5. 6.
А такой выдает сообщение об ошибке Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 11:39 |
|
for select into do select
|
|||
---|---|---|---|
#18+
Табличку-то покажи. Индекс по дате есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 11:43 |
|
for select into do select
|
|||
---|---|---|---|
#18+
RoboTehnikПодскажите пожалуйста как мне реализовать запрос. В таблице есть поля с датой документа и датой выгрузки. Даты в них могут быть разные для каждой записи. Нужно для вчерашней даты выгрузки сформировать реестр документов по датам. Такой запрос работает очень долго Код: plsql 1. 2. 3. 4. 5. 6.
В результат запроса попадут не документы выгруженные вчера, а документы у которых date_doc совпадает с датой документов выгруженных вчера. В приведенном запросе не хватает скобки ")" в функции dateadd. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:05 |
|
for select into do select
|
|||
---|---|---|---|
#18+
RoboTehnik, а чем просто Код: sql 1. 2. 3. 4. 5.
не угодил? И таки да желателен индекс по Sent_Date ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:10 |
|
for select into do select
|
|||
---|---|---|---|
#18+
Есть оператор between вместо "больше" и "меньше", красивее запрос получается. А если нужен только один день, то банально можно использовать "равно". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:24 |
|
for select into do select
|
|||
---|---|---|---|
#18+
m7mRoboTehnik, а чем просто Код: sql 1. 2. 3. 4. 5.
не угодил? И таки да желателен индекс по Sent_Date Да. Автор топика немеряно усложнил запрос. А если Sent_Date - типа date, то where и вовсе в данном случае уменьшается до Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:28 |
|
for select into do select
|
|||
---|---|---|---|
#18+
KreatorXXI, Опять же можно не заморачиваться с функцией dateadd, а писать проще - (current_date-1). Гуру могут поправить, если это концептуально не правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:28 |
|
for select into do select
|
|||
---|---|---|---|
#18+
Hello, Kreatorxxi! You wrote on 29 декабря 2016 г. 12:29:22: Kreatorxxi> Есть оператор between вместо "больше" и "меньше",BETWEEN это >= <= Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:30 |
|
for select into do select
|
|||
---|---|---|---|
#18+
wadman, Да, индекс есть по обоим датам. Всю таблицу я показать конечно же не могу, в ней немногим более 43 млн записей. Таблица ниже поможет представить правильно суть задачи. date_doc; sent_date; sum;28.12.2016;28.12.2016 18:05;1028.12.2016;28.12.2016 18:05;1528.12.2016;28.12.2016 18:05;527.12.2016;28.12.2016 18:05;327.12.2016;28.12.2016 18:05;1627.12.2016;28.12.2016 18:05;1826.12.2016;28.12.2016 18:05;226.12.2016;28.12.2016 18:05;726.12.2016;28.12.2016 18:05;1125.12.2016;28.12.2016 18:05;17 В итоге, должен получиться такой отчет date_doc; sum28.12.2016;3027.12.2016;1826.12.2016;2025.12.2016;17 Меня больше интересует второй вариант решения, он как мне кажется наименее ресурсоемкий. Почему после do нельзя вписать еще один select? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:40 |
|
for select into do select
|
|||
---|---|---|---|
#18+
[quot Граур Станислав]RoboTehnikВ результат запроса попадут не документы выгруженные вчера, а документы у которых date_doc совпадает с датой документов выгруженных вчера. В приведенном запросе не хватает скобки ")" в функции dateadd. Кстати да, поначалу не сообразил, что условие вообще не верно. Если есть документы с date_doc удовлетворящим условию, но при этом sent_date совершенно другим, они тоже попадут в выборку. Если со скобками разобраться. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:42 |
|
for select into do select
|
|||
---|---|---|---|
#18+
Мимопроходящий, Правильно. Я к тому, чтобы убрать типа вот такое: Код: sql 1.
Логичней: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:42 |
|
for select into do select
|
|||
---|---|---|---|
#18+
RoboTehnikВсю таблицу я показать конечно же не могу, в ней немногим более 43 млн записей. Не содержимое, а DDL (полное описание таблицы). RoboTehnikМеня больше интересует второй вариант решения, он как мне кажется наименее ресурсоемкий. 20059782 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:43 |
|
for select into do select
|
|||
---|---|---|---|
#18+
KreatorXXIЛогичней: Не логичней, ибо KreatorXXI Код: sql 1.
это уже следующие сутки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:43 |
|
for select into do select
|
|||
---|---|---|---|
#18+
RoboTehnikПочему после do нельзя вписать еще один select? можно, только он должен куда-то возвращать данные (into...). RoboTehnikА такой выдает сообщение об ошибке заклинаю, никогда не пишите такой текст без приведения точного сообщения об ошибке. Сэкономит массу времени и вам, и отвечающим. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:43 |
|
for select into do select
|
|||
---|---|---|---|
#18+
Граур Станислав В результат запроса попадут не документы выгруженные вчера, а документы у которых date_doc совпадает с датой документов выгруженных вчера. В приведенном запросе не хватает скобки ")" в функции dateadd. Спасибо за замечание по скобке, я после публикации сообщения не нашел, как его исправить. Действительно, мне нужны не документы выгруженные вчера, а суммы документов, у которых date_doc совпадает с датой документов выгруженных вчера. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:44 |
|
for select into do select
|
|||
---|---|---|---|
#18+
МимопроходящийHello, Kreatorxxi! You wrote on 29 декабря 2016 г. 12:29:22: Kreatorxxi> Есть оператор between вместо "больше" и "меньше",BETWEEN это >= <= Спасибо за подсказку, не ожидал, столь оперативных ответов. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:50 |
|
for select into do select
|
|||
---|---|---|---|
#18+
RoboTehnikДа, индекс есть по обоим датам. Всю таблицу я показать конечно же не могу, в ней немногим более 43 млн записей. Таблица ниже поможет представить правильно суть задачи. RoboTehnik мне нужны не документы выгруженные вчера, а суммы документов, у которых date_doc совпадает с датой документов выгруженных вчера. А если вот так date_doc; sent_date; sum;28.12.2016;28.12.2016 18:05;1028.12.2016;28.12.2016 18:05;1528.12.2016;28.12.2016 18:05;527.12.2016;28.12.2016 18:05;327.12.2016;28.12.2016 18:05;1627.12.2016;28.12.2016 18:05;1826.12.2016;28.12.2016 18:05;226.12.2016;28.12.2016 18:05;726.12.2016;28.12.2016 18:05;1125.12.2016;28.12.2016 18:05;1725.12.2016;27.12.2016 18:05;10 Что должно быть в итоге??? date_doc; sum28.12.2016;3027.12.2016;1826.12.2016;2025.12.2016;17 или date_doc; sum28.12.2016;3027.12.2016;1826.12.2016;2025.12.2016;27 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:58 |
|
for select into do select
|
|||
---|---|---|---|
#18+
RoboTehnikСпасибо за замечание по скобке, я после публикации сообщения не нашел, как его исправить. Действительно, мне нужны не документы выгруженные вчера, а суммы документов, у которых date_doc совпадает с датой документов выгруженных вчера. В таком случае из таблицы date_doc; sent_date; sum;28.12.2016;28.12.2016 18:05;1028.12.2016;28.12.2016 18:05;1528.12.2016;28.12.2016 18:05;527.12.2016;28.12.2016 18:05;327.12.2016;28.12.2016 18:05;1627.12.2016;28.12.2016 18:05;1826.12.2016;28.12.2016 18:05;226.12.2016;28.12.2016 18:05;726.12.2016;28.12.2016 18:05;1125.12.2016;28.12.2016 18:05;1721.12.2016;28.12.2016 18:05;1621.12.2016;22.12.2016 18:05;15 в вашу сводку попадет и последний документ от 21.12.2016, выгруженный 22.12.2016. Это будет правильно ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 12:59 |
|
for select into do select
|
|||
---|---|---|---|
#18+
RoboTehnikСпасибо за замечание по скобке, я после публикации сообщения не нашел, как его исправить. Действительно, мне нужны не документы выгруженные вчера, а суммы документов, у которых date_doc совпадает с датой документов выгруженных вчера. Тогда понятно. Так и надо было говорить сразу. Можно и execute block. Но тогда нужно объявлять, что он что-то возвращает. Внутренний селект должен класть куда-то значения, т.е. into тоже должен быть. И должен быть suspend. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 13:04 |
|
for select into do select
|
|||
---|---|---|---|
#18+
m7mRoboTehnikДа, индекс есть по обоим датам. Всю таблицу я показать конечно же не могу, в ней немногим более 43 млн записей. Таблица ниже поможет представить правильно суть задачи. RoboTehnik мне нужны не документы выгруженные вчера, а суммы документов, у которых date_doc совпадает с датой документов выгруженных вчера. А если вот так date_doc; sent_date; sum;28.12.2016;28.12.2016 18:05;1028.12.2016;28.12.2016 18:05;1528.12.2016;28.12.2016 18:05;527.12.2016;28.12.2016 18:05;327.12.2016;28.12.2016 18:05;1627.12.2016;28.12.2016 18:05;1826.12.2016;28.12.2016 18:05;226.12.2016;28.12.2016 18:05;726.12.2016;28.12.2016 18:05;1125.12.2016;28.12.2016 18:05;1725.12.2016;27.12.2016 18:05;10 Что должно быть в итоге??? date_doc; sum28.12.2016;3027.12.2016;1826.12.2016;2025.12.2016;17 или date_doc; sum28.12.2016;3027.12.2016;1826.12.2016;2025.12.2016;27 В итоге должна получиться сумма документов за 25 декабря. То есть вторая таблица верна. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 13:08 |
|
for select into do select
|
|||
---|---|---|---|
#18+
Граур СтаниславRoboTehnikСпасибо за замечание по скобке, я после публикации сообщения не нашел, как его исправить. Действительно, мне нужны не документы выгруженные вчера, а суммы документов, у которых date_doc совпадает с датой документов выгруженных вчера. В таком случае из таблицы date_doc; sent_date; sum;28.12.2016;28.12.2016 18:05;1028.12.2016;28.12.2016 18:05;1528.12.2016;28.12.2016 18:05;527.12.2016;28.12.2016 18:05;327.12.2016;28.12.2016 18:05;1627.12.2016;28.12.2016 18:05;1826.12.2016;28.12.2016 18:05;226.12.2016;28.12.2016 18:05;726.12.2016;28.12.2016 18:05;1125.12.2016;28.12.2016 18:05;1721.12.2016;28.12.2016 18:05;1621.12.2016;22.12.2016 18:05;15 в вашу сводку попадет и последний документ от 21.12.2016, выгруженный 22.12.2016. Это будет правильно ? Да, это будет правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 13:09 |
|
for select into do select
|
|||
---|---|---|---|
#18+
stelvicRoboTehnikСпасибо за замечание по скобке, я после публикации сообщения не нашел, как его исправить. Действительно, мне нужны не документы выгруженные вчера, а суммы документов, у которых date_doc совпадает с датой документов выгруженных вчера. Тогда понятно. Так и надо было говорить сразу. Можно и execute block. Но тогда нужно объявлять, что он что-то возвращает. Внутренний селект должен класть куда-то значения, т.е. into тоже должен быть. И должен быть suspend. Вот с этого места поподробнее пожалуйста, можно небольшой примерчик? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 13:20 |
|
for select into do select
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Как-то так. Не уверен, что без ошибок. Проверить негде ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 13:21 |
|
for select into do select
|
|||
---|---|---|---|
#18+
процедуру пиши. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 13:21 |
|
for select into do select
|
|||
---|---|---|---|
#18+
stelvic, Спасибо всем. Заработало как надо и ощутимо быстрее. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2016, 14:30 |
|
|
start [/forum/topic.php?fid=40&msg=39377504&tid=1561775]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 270ms |
total: | 422ms |
0 / 0 |