|
Составить более оптимальный запрос (оптимизировать, предложить лучшее решение задачи)
|
|||
---|---|---|---|
#18+
Доброго времени суток! Имеется 3 таблицы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Необходимо для каждой строки из salestrk (s) получить наибольшее по trk2tank.`datetimeFrom` значения trk2tank.`tank_number` и trk2tank.`tank_code` из таблицы trk2tank (t2) по условию, т.е.: Код: sql 1.
Затем для каждой строки из этой же таблицы (s) получить среднее значение между предыдущим и следующим по времени значениями `density` из таблицы dpu (d) по условиям (пример предыдущего, т.к. как вывести среднее двух не разобрался): Код: sql 1.
В данный момент имею следующий запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
И исключая того что из dpu выводится только ближайшее предыдущее значение он работает. (Пробовал сделать еще один JOIN к этой же таблице, запрос выполняется наверное до истечения таймаута) НО составлял я его по отрывкам из гугла, поэтому уверен что его нужно оптимизировать. И требуется чтобы вместо ближайшего предыдущего, выводилось среднее между ближайшим предыдущим и ближайшим следующим. В таблице salestrk содержится ~100 000 строк В таблице dpu содержится ~1 000 000 строк В таблице trk2tank содержится ~1 000 строк Соответственно в таком виде запрос выполняется довольно долго. Изменение структуры таблиц при необходимости допускается Буду рад любой помощи. в SQL не силен, прошу сильно не пинать) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 23:47 |
|
Составить более оптимальный запрос (оптимизировать, предложить лучшее решение задачи)
|
|||
---|---|---|---|
#18+
Точная версия MySQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 23:58 |
|
Составить более оптимальный запрос (оптимизировать, предложить лучшее решение задачи)
|
|||
---|---|---|---|
#18+
Akina, Сервер: MySQL (127.0.0.1 via TCP/IP) Тип сервера: MySQL Версия сервера: 5.7.31 - MySQL Community Server (GPL) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 00:00 |
|
Составить более оптимальный запрос (оптимизировать, предложить лучшее решение задачи)
|
|||
---|---|---|---|
#18+
Тогда подзапрос для получения "наибольшего trk2tank.`datetimeFrom`", а далее по нему получение нужных данных из второй копии таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 07:51 |
|
Составить более оптимальный запрос (оптимизировать, предложить лучшее решение задачи)
|
|||
---|---|---|---|
#18+
Akina, т.е. Код: sql 1. 2. 3. 4.
Можно считать оптимальным? Подскажите по поводу среднего `density` из таблицы dpu, среднее как сумма ближайшего большего и меньшего по дате деленная на 2 и времени (в данный момент получаю только предыдущее) в принципе запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
делает это для фиксировано указанного obj, tank_code и datetime Но как этот запрос "интегрировать" в первый не понимаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 08:29 |
|
Составить более оптимальный запрос (оптимизировать, предложить лучшее решение задачи)
|
|||
---|---|---|---|
#18+
Akina, с утра не понял о чем речь)) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Как более грамотно получить значение соответствующее выводу Код: sql 1. 2. 3. 4. 5. 6. 7.
? Текущий вариант выглядит как минимум неказисто... Пытался обернуть в UNION и затем AVG но получаю ошибку (возможно что то делаю не так) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 09:37 |
|
|
start [/forum/topic.php?fid=47&msg=40116917&tid=1827857]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
146ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 238ms |
total: | 481ms |
0 / 0 |