|
|
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#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. Наверное он очень корявый, но пока не сообразил как его сделать более грамотно хотя данных еще не так много но уже формирует 16 секунд посоветуйте как правильно сделать запрос не могу сообразить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 20:45:07 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 20:53:02 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
motorov, кстати, вот такая прияная штучка: http://sqlformat.appspot.com/ а вот результат (без изменений, просто чтоб читать можно было) : Код: 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. 46. 47. 48. 49. 50. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 21:02:28 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
ок, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 21:04:54 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
решение довольно простое, переписать так: 1. сделать селецт сначала только по таблице services_vagon Код: sql 1. 2. 3. 4. 2. далее все ваши отдельные каунты добавляем так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. для ясности: IF(a='a' AND b='b'.....) возврашает 1 если условия выполняются или 0 если нет. Тогда SUM(IF(a='a' AND b='b'.....)) возвратит количество раз когда все условия выполнились ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 21:13:12 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
3. ну а потом соединить этото все с таблицей customer : select * from customers JOIN ( ....большой селект из пункта 2 ) zzzz ON c.id = zzzz.id_costumer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 21:15:49 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
... поправка... В пункте #2 надо, конечно поправит алиасы, заменить S2, SV на конкретный алиас, например SV Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 21:18:41 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
javajdbc3. ну а потом соединить этото все с таблицей customer : select * from customers JOIN ( ....большой селект из пункта 2 ) zzzz ON c.id = zzzz.id_costumer да лучше, сейчас буду пробовать все собрать и понять. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 21:19:12 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
что-то у меня подозрения что я фигню сморозил. надо так: sum(a='a' AND b='b' AND....) или sum( if((a='a' AND b='b' AND....),1,0) ) просто IF без ....1,0) должно выдать ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2013, 23:18:56 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#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.09.2013, 17:17:50 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
motorov, 1. для скорости лучше сделать селкт и груп бай сначала на services_vagon и лиш потом подсоединить таблицу customer (см пункт #3 в предыдуших постах) 2. >> только мне еще не понятно как сюда вставить >> количество в вагонов в прошлом году такого же месяца >> и количесто прошлого месяца каких еше вагонов, зачем еше вагонов? будьте конкретнее: примеры данных, четкое описание условий, если есть -- работаюший вариант СКЛ-а... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2013, 17:29:05 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
javajdbcmotorov, 1. для скорости лучше сделать селкт и груп бай сначала на services_vagon и лиш потом подсоединить таблицу customer (см пункт #3 в предыдуших постах) 2. >> только мне еще не понятно как сюда вставить >> количество в вагонов в прошлом году такого же месяца >> и количесто прошлого месяца каких еше вагонов, зачем еше вагонов? будьте конкретнее: примеры данных, четкое описание условий, если есть -- работаюший вариант СКЛ-а... есть поле Код: sql 1. 2. 3. оно выдает количество погруженных вагонов мне в отчете нужно чтобы следующее поле было количество (количесво погруж/количество погруж. в прошлом месяце)*100 и так же нужно к этому месяцу прошлого года ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2013, 18:27:01 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
motorov, ок, есть парочка подходов: 1. громоздкий: включить дополнительные временые рамки в WHERE WHERE.... (SV.dt_doc>'2013-08-01' and SV.dt_doc<'2013-08-30') or (SV.dt_doc>'2012-08-01' and SV.dt_doc<'2012-08-30') а потом в SELECT части использовать конкретные временые рамки: SELECT ................ SUM(IF( SV.pravo='ОАО РЖД' AND SV.dt_doc>'2013-08-01' and SV.dt_doc<'2013-08-30',1,0)) rjdvag_2013, SUM(IF( SV.pravo='ОАО РЖД' AND SV.dt_doc>'2012-08-01' and SV.dt_doc<'2012-08-30',1,0)) rjdvag_2012, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2013, 18:36:09 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
2. более приличные подход будет сделать репорт с переменными датами: напромер динамически генерировать на клиенете, в процедуре, или может VIEW сделать, хотя может быть медлено. Затем прогнать 3 репорта (этот месац, прошлый месяц и прошлуй год) и комбинировать результат уже на клиенте 3. Ну и продолжение предыдушего варинта: создать таблицу результатов по месяцам, заполнить ее селектом из #2 и делать репорты из таблицы результатов. Раз в месяц надо будет запонять следующую строчку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2013, 18:40:40 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
да я про такой вариант думал, а он правильный? тут получится сделать три временных периода текущий месяц, прошлый и текущий в прошлом году ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2013, 18:42:10 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
javajdbc2. более приличные подход будет сделать репорт с переменными датами: напромер динамически генерировать на клиенете, в процедуре, или может VIEW сделать, хотя может быть медлено. Затем прогнать 3 репорта (этот месац, прошлый месяц и прошлуй год) и комбинировать результат уже на клиенте 3. Ну и продолжение предыдушего варинта: создать таблицу результатов по месяцам, заполнить ее селектом из #2 и делать репорты из таблицы результатов. Раз в месяц надо будет запонять следующую строчку. ок, буду сейчас это переваривать и пробовать, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2013, 18:43:39 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38405081&tid=1835999]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 195ms |
| total: | 311ms |

| 0 / 0 |
