|
|
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
есть таблица A (дата, номер) надо получить таблицу B с результатом (дата, начальный номер в серии, конечный номер в серии) за одну дату может попасть несколько серий, тогда будет несколько таких строк, где серия - это подряд идущие номера без пропуска, если хотя бы один номер отсутствует то начинается новая серия по сути нужна обратная операция функции generate_series() Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. что бы получить такой результат datminnumbermaxnumber'2015-12-15'1014'2015-12-15'1618'2015-12-16'1920 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2015, 16:31 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
Legushka, Number - row_number() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2015, 16:38 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
p2., ? как можно сделать с помощью row_number() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2015, 16:51 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
Legushka, если не гнаться за вычислительным оптимумом -- то можно в лоб:~ Код: 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. -- как это сделать на проходе без процедурного FOR rec IN SELECT .... ORDER BY -- на одном With -- пока не придумал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2015, 17:35 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
Legushka, Код: 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.12.2015, 17:35 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
ох уж эти усложняторы Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2015, 17:50 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
p2.ох уж эти усложняторы ну да, одну материализацию тот факт что dlt== grp экономит. Но по сравнению с прямым однократным FOR LOOP--ом это крайне не эффективно. выразительных средств Sql не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2015, 18:02 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
qwwqp2.ох уж эти усложняторы ну да, одну материализацию тот факт что dlt== grp экономит. Но по сравнению с прямым однократным FOR LOOP--ом это крайне не эффективно. выразительных средств Sql не хватает.однократному for-loop нужно на вход подавать отсортированные данные. Получается тот же самый однократный over(), поэтому выражаю сомнение в неэффективной крайности. Про выразительность, ну вот в оракле ради обработки "серий" припилили такое: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2015, 18:46 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
p2.qwwqпропущено... ну да, одну материализацию тот факт что dlt== grp экономит. Но по сравнению с прямым однократным FOR LOOP--ом это крайне не эффективно. выразительных средств Sql не хватает.однократному for-loop нужно на вход подавать отсортированные данные. Получается тот же самый однократный over(), поэтому выражаю сомнение в неэффективной крайности. какбе мне агрегировать после "лупа по сорту" (т.е. после овера) не надо. на этом и экономия. p2.Про выразительность, ну вот в оракле ради обработки "серий" припилили такое: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. рукалецо. ара кал всегда страдал крайним лингвистическим идиотизмом в запущенной форме. и состоит из синтаксического мусора чуть более, чем полностью. это когда математексы беруццо язык изо бредать. наняли бы хоть каких--то полиглотов из навахо, чоле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2015, 20:45 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
qwwqp2.пропущено... однократному for-loop нужно на вход подавать отсортированные данные. Получается тот же самый однократный over(), поэтому выражаю сомнение в неэффективной крайности.какбе мне агрегировать после "лупа по сорту" (т.е. после овера) не надо. на этом и экономия.правильно понимаю, что проверка/обновление значения по хешу (груп бай) вместо сравнений с предыдущим (for-loop) это и есть крайняя неэффективность? Думается тут для усугубления крайности заявленной экономии придется тщательно специфицировать соответствующие крайности данных. qwwqрукалецо. ара кал всегда страдал крайним лингвистическим идиотизмом в запущенной форме. и состоит из синтаксического мусора чуть более, чем полностью. это когда математексы беруццо язык изо бредать. наняли бы хоть каких--то полиглотов из навахо, чоле.Придать веса критицизму могли бы альтернативные синтаксические изыскания. Есть таковые? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2015, 21:52 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
p2.qwwqпропущено... какбе мне агрегировать после "лупа по сорту" (т.е. после овера) не надо. на этом и экономия.правильно понимаю, что проверка/обновление значения по хешу (груп бай) вместо сравнений с предыдущим (for-loop) это и есть крайняя неэффективность? Думается тут для усугубления крайности заявленной экономии придется тщательно специфицировать соответствующие крайности данных. а овер--ордер--бай у вас бесплатно делаицца ? -- это уже даже не наглость p2.qwwqрукалецо. ара кал всегда страдал крайним лингвистическим идиотизмом в запущенной форме. и состоит из синтаксического мусора чуть более, чем полностью. это когда математексы беруццо язык изо бредать. наняли бы хоть каких--то полиглотов из навахо, чоле.Придать веса критицизму могли бы альтернативные синтаксические изыскания. Есть таковые? ну какбе есть простые принципы -- всё, что функция -- все от параметров. только от параметров и ничего более, как от параметров. всё, что не только от параметров -- уже не функция. за тягу делать из всего синтаксическое подобие вымазанных синтаксическим ара--калом функций -- вешать через расстреляние на месте. я бы думал на предмет "предложения" ["FOR" a-la "WITH"], а не функции. но мне за это денех не плотют. а вот отстреливать дебилов я и даром могу. или хотя бы тыкать в них пальцем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2015, 08:31 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
qwwqа овер--ордер--бай у вас бесплатно делаицца ?Давай-ка ты приведешь конкретную реализацию предложенного тобой "FOR rec IN SELECT .... ORDER BY", чтобы крайность можно было сравнить более предметно. И обращаю внимание, что проявление ущемленности, выражаемое коверканьем слов, является нарушением правил форума. qwwq"FOR" a-la "WITH"with является продюсером строк, а match_recognize оперирует возвращаемым предшествующим from-выражением множеством строк, по типу как group by, только group by относится ко всему from-where. То, что выбран не процедурный, а декларативный язык определения паттернов, вполне согласуется с идеологией sql. С таким же успехом можно предъявлять претензии к select и писать выборки и джоины явными forами по строкам. Наверняка это в каких-то случаях даже будет эффективней. Но ведь никто не запрещает использовать процедуры и в них терпеть только простейший селект-фром. Более того, для тех, кому не хватает выразительности sql, помимо хранимых процедур, есть вставки процедурного языка with function. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2015, 09:51 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
p2., давай-ка ты мне не будешь указывать., что делать, и я не буду намекать, какой буквы "раз" не хватает в твоём нике за буквами "пи" и "два". и вообще -- "мы с вами вместе не служили ?" ps умному -- достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2015, 10:26 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#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. 46. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. -- гири plpgsql -- в довольно большой константе в O(f(N)) перед (f(N)). до тех пор, пока строк мало -- затраты на этот множитель перевешивают. а с explain analyze у меня какая--то фигня лезет -- затраты (с окнами) даже больше времени фетча всех данных в разы/на порядок. Пока не скажешь Timing off; Не в первый раз, такая байда в игровом 9.4.1 ,кстати. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2015, 12:41 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
qwwq, проверил скорость у себя локально на сервере 9.4.4 SELECT * FROM tst_loop (); -- ~ 1800 млс select dat, min(number), max(number) .... -- ~ 1300 млс эти результаты стабильны Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2015, 18:41 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
grufos, и чо ? вы намерили разницу между C--реализацией WindowAgg и plpgsql реализацией того же самого ("окно" отслеживается чуть сложнее, чем стандартное). При этом затртаты на лишний хеш--агрегат просто потерялись. PS и да -- я намерил разницу не с хеш--агрегатом. т.к. work_mem был '4MB'. И чо ? это что--то изменяет в алгоритмах ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2015, 19:07 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
Уважаемый qwwq, я только лишь хотел показать, что время выполнения может быть другим. Чтобы у читающих форум сложилось более широкое представление о этих реализациях. И разнице в их работе. А вообще спасибо вам большое за проделанную работу в подготовке примера. Я уверен, что начинающим - это будет очень полезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2015, 10:38 |
|
||
|
помогите сгруппировать серии (где все номера по порядку)
|
|||
|---|---|---|---|
|
#18+
grufos, 1. спасибо за поправку (я было не заметил, что померил не то). из неё --мораль: затраты на хеш--агрегат -- это множитель в константе при O(N) -- т.к. в вышеприведенном коде FORLOOP это было бы по 1 операции извлечения из хештаблицы , 2 операции сравнения + 1--2 операции кладки взад в хештаблицу/на шаг цыкла. -- т.е. просто несколько лишних операций сложности O(1). скажем множитель "Ch" [+отложенное извлечение из хештаблицы в конце цыкла -- т.е. затраты памяти] -- поэтому, если реализация FORLOOP в plpgsql в "Cplpgsql" раз затратнее того же FORLOOP в С, и Cplpgsql > Ch -- то выгодность алгоритма средствами plpgsql не выявляема (он проигрывает лишним операциям с хешем -- лишними операциями в plpgsql реализации FORLOOP, которых тупо набирается больше) , за исключением того, что он таки экономичней по памяти, и как только мы переходим к режиму ограничения по памяти -- даже plpgsql--реализация выигрывает -- т.к. хештабличка не влезат в work_mem, и оптимайзер переходит к групп--агрегату. А это -- уже лишний промежуточный сорт, как минимум. 2. то, что внутре WindowAgg нет никакой неонке, а банальная реализация FORLOOP--а надеюсь не озарение даже "для начинающих". не ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2015, 11:19 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39135170&tid=1997552]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
152ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 420ms |

| 0 / 0 |
