|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
Firebird v 2.5. Есть таблица: Код: sql 1. 2. 3. 4. 5. 6.
ID TAG VDATA VTIME VAL1 B 09.01.2017 06:00 02 A 09.01.2017 09:34 3333 A 09.01.2017 12:56 4444 A 09.01.2017 15:30 5555 B 09.01.2017 18:00 16 A 09.01.2017 19:15 07 A 10.01.2017 01:25 7778 A 10.01.2017 03:45 8889 A 10.01.2017 05:43 99910 B 10.01.2017 06:00 011 A 10.01.2017 07:21 111112 A 10.01.2017 08:17 2222 Мне надо: 1. Выбрать все значения для тэга A за период с 09.01.2017 по 10.01.2017 в обратном порядке по хронологии 2. Для каждого тэга A выбрать последнее предшествующее по времени значение тэга B 12 A 10.01.2017 08:17 2222 10 B 10.01.2017 6:00 011 A 10.01.2017 07:21 1111 10 B 10.01.2017 6:00 0 9 A 10.01.2017 05:43 999 5 B 09.01.2017 18:00 1 8 A 10.01.2017 03:45 888 5 B 09.01.2017 18:00 1 7 A 10.01.2017 01:25 777 5 B 09.01.2017 18:00 1 6 A 09.01.2017 19:15 0 5 B 09.01.2017 18:00 1 4 A 09.01.2017 15:30 555 1 B 09.01.2017 6:00 0 3 A 09.01.2017 12:56 444 1 B 09.01.2017 6:00 0 2 A 09.01.2017 09:34 333 1 B 09.01.2017 6:00 0 Первое просто: Код: sql 1. 2. 3. 4. 5. 6. 7.
А вот второе никак не получается. Запросом вообще что-то даже мыслей нет, как сделать, а в процедуре если пишу Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
получатся неправильно: ищется тэг "B", у которого И дата, И время меньше, чем у тэга "А". То есть для тэгов "A" с ID 7, 8 и 9 тэг "B" найден не будет. В общем, не выходить каменный цветок. Подскажите, пожалуйста, куда грести? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2017, 11:31 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
Цветовод, Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2017, 11:40 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
Цветовод, 1. Надо было делать поле с типом timestamp а не разбивать на дату и время 2. В 3.0 см. функцию LAG 3. в 2.5 как-то так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2017, 11:42 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
Симонов Денис, а у тебя там ещё и разбиение по tag есть ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2017, 11:46 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
WildSery, Неа, я так тоже пробовал. Не цветок. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2017, 11:51 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
Цветовод, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
производительность будет ниже плинтуса. Пока не поздно добавь поле timestamp. Запрос сильно упроститься ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2017, 11:55 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
Цветовод, Шарик, ты балбес (ц) Неужели сам не видишь? В одном месте написал ORDER BY V.VDATA DESC, V.VTIME DESC, а в другом, почему-то ORDER BY B.VTIME DESC ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2017, 11:55 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
Цветовод, FB правильно понимает вот такой синтаксис: Код: sql 1.
Попробуйте. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2017, 11:56 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
WildSeryШарик, ты балбес (ц) За Шарика ответишь! ))) WildSeryВ одном месте написал ORDER BY V.VDATA DESC, V.VTIME DESC, а в другом, почему-то ORDER BY B.VTIME DESC Не, не айс. Так всегда выбирается тэг с ID = 10, т.е. всегда срабатывает вторая часть WHERE (которая после OR). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 04:31 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
Симонов Денис Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
А вот это работает. Симонов Дениспроизводительность будет ниже плинтуса.Не, не ниже. Она ваще никакая.)) Но это понятно. Симонов ДенисПока не поздно добавь поле timestamp. Запрос сильно упроститьсяЯ не могу изменять типы полей. В базу пишет другая программа. Не моя. Это сервис сбора данных с оборудования. Без исходников. Но я могу для себя добавить такое поле и формировать его триггером. Я, конечно, протестирую такой вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 04:42 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
KreatorXXI, Денис обогнал тебя, но все равно спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 04:45 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
Тут у меня возникла мысль - развернуть порядок выборки в процедуре - сначала дернуть все тэги "B", а потом для каждого из них делать выборку "A". Пойду-ка я эту мысль думать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 04:49 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
ЦветоводНе, не айс. Так всегда выбирается тэг с ID = 10, т.е. всегда срабатывает вторая часть WHERE (которая после OR)."Вы что, за меня и есть будете?! - Ага!" (ц) Написать "<" для вместо "<=" попробуй. Мне показалось очевидным, что при сравнении на равенство в качестве предыдущей сама себя всегда выбирать будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 09:29 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
Симонов Дениспроизводительность будет ниже плинтуса. Пока не поздно добавь поле timestampИли индекс по выражению, убывающий ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 10:33 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
ЦветоводKreatorXXI, Денис обогнал тебя, но все равно спасибо. Не заметил. Сорри. Ну, акцентировал внимание на фиче, будем считать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 13:07 |
|
Помогите с запросом, PLEASE
|
|||
---|---|---|---|
#18+
hvladИли индекс по выражению, убывающийДелал VDATA + VTIME. Производительность растет, несущественно (где-то в 2,5 раза) KreatorXXIНе заметил. Сорри. Ну, акцентировал внимание на фиче, будем считать. OK. ЦветоводТут у меня возникла мысль - развернуть порядок выборки в процедуре - сначала дернуть все тэги "B", а потом для каждого из них делать выборку "A". Пойду-ка я эту мысль думать. Короче. - Добавил поле TIMESTAMP (формируется в триггере BEFORE INSERT) - Сделал по нему DESC индекс. - в процедуре поменял порядок - см. выше. Результат великолепный - все просто летает. Спасибо всем! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 04:07 |
|
|
start [/forum/topic.php?desktop=1&fid=40&tid=1561763]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 171ms |
0 / 0 |