Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
вопщем задачка такая. Есть таблица в которой несколько интовых полей и поле таймстамп. это вроде как показания датчиков в конкретные моменты времени. нужно выбрать получить на выходе ровсет, в котором строки по дате друх от друга различаются на не больше чем минуту, причем значения счетчиков не равны? вроде бы простая задачка, ан на MSSQL мне пришлось хп писать, ну и на постгре тоже пока хп. а может можно както так SELECT составить? что скажете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 10:08 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
Приведи тестовый набор данных и желаемый вид результата. Постарайся учесть все нюансы распределения данных (наличие двух соседних записей, с разностью по времени более минуты, наличие записей с разностью по времени менее минуты, но с одинаковыми показаниями счетчиков) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 10:26 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
ммм... вобщем, вот что у меня есть. Код: plaintext 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. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. исходный кортеж (select * from stats where club_id = 2 and place_no = 1 order by last_query): "id";"place_no";"club_id";"currentin";"currentout";"last_query""226069";"1";"2";"3252";"2305";"2006-01-01 00:00:00""226109";"1";"2";"6949";"6067";"2006-01-01 00:00:30""226149";"1";"2";"8851";"8841";"2006-01-01 00:01:00""226189";"1";"2";"9693";"11444";"2006-01-01 00:01:30""226229";"1";"2";"14420";"12481";"2006-01-01 00:02:00""226269";"1";"2";"15853";"14170";"2006-01-01 00:02:30""226309";"1";"2";"17924";"15631";"2006-01-01 00:03:00"..."1262629";"1";"2";"64851367";"64416277";"2006-01-09 23:57:00""1262669";"1";"2";"64855681";"64419252";"2006-01-09 23:57:30""1262709";"1";"2";"64857460";"64419537";"2006-01-09 23:58:00""1262749";"1";"2";"64862068";"64421969";"2006-01-09 23:58:30""1262789";"1";"2";"64865770";"64426617";"2006-01-09 23:59:00""1262829";"1";"2";"64865800";"64428536";"2006-01-09 23:59:30" и результат чтото вроде: "currentin";"currentout";"last_query""1296";"1296";"1900-01-01 00:00:00" --1296 записей в ровсете"3252";"2305";"2006-01-01 00:00:00""44342";"48034";"2006-01-01 00:10:00""97735";"100387";"2006-01-01 00:20:00""150207";"156841";"2006-01-01 00:30:00"..."64646305";"64224794";"2006-01-09 23:20:00""64702865";"64275545";"2006-01-09 23:30:00""64759635";"64326561";"2006-01-09 23:40:00""64807066";"64379842";"2006-01-09 23:50:00" --- вот так это работает на ХП. можно ли это сделать просто select'ом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 11:39 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
текст не читал, но интуиция мне подсказывает, что заменить процедуру на три экрана на селект будет совсем не просто :) а чем не устраивает вариант с процедурой ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 12:03 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
Tertium Organum вот так это работает на ХП. можно ли это сделать просто select'ом?Давай немного всё упростим. Подготовь тестовый набор данных из 20-30 строк максимум. Пусть это будут даже данные из таблицы, расскажи на словах алгоритм их обработки процедурой, приведи результат этой обработки. А там видно будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 12:08 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
Вообще, по словесному описанию из первого поста, напрашивается банальнейший запрос с EXISTS-подзапросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 12:24 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
Бабичев СергейВообще, по словесному описанию из первого поста, напрашивается банальнейший запрос с EXISTS-подзапросом.Ну что-то вроде вот такого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Возможно, что вместо выделенного желтым для твоей задачи нужно будет написать вот такое условие (если проверка должна делаться только вверх по списку): Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 12:37 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
запустил вот такое Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. жду до сих пор но что-то мне подсказывает, что не дождусь - там миллион записей, из которых для club_id = 1 and place_no = 1 - 25000. из них должно выбрать чтото типа 1200 прошло порядка 300 секунд. хп это делает за 3,5 сек. мда, вложенные селекты это круть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 12:55 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
А если просто группировать по времени, вернее по функции округляющей время до нужного интревала? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2007, 17:08 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
Tertium Organumзапустил вот такое Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. жду до сих пор но что-то мне подсказывает, что не дождусь - там миллион записей, из которых для club_id = 1 and place_no = 1 - 25000. из них должно выбрать чтото типа 1200 прошло порядка 300 секунд. хп это делает за 3,5 сек. мда, вложенные селекты это круть :)Для [not] exists-подзапросов крайне желательно наличие подходящего индекса. Возможно в твоем случае потребуется составной индекс по полям (club_id asc, place_no asc, last_query asc). Ну и выделенное желтым условие нужно переделать на тот манер, что я тебе говорил, то есть нужно исключить упоминание поля t2.last_query в вычисляемых выражениях, а лучше сравнивать это поле с какими-то вычисляемыми выражениями на основе поля t1.last_query. Иначе наличие индекса по трем полям в плане селективности будет эквивалентно индексу по двум полям (club_id asc, place_no asc), но при этом будет гораздо менее эффективно в плане ввода-вывода. Кроме того, можно избавиться от exists-подзапроса, переписав запрос через join. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 05:44 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
Бабичев СергейКроме того, можно избавиться от exists-подзапроса, переписав запрос через join.Точнее, через LEFT JOIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 11:28 |
|
||
|
Возможно ли сделать прореженную выборку простым запросом?
|
|||
|---|---|---|---|
|
#18+
...ну вобщем-то все равно выясняется, что функция, которая просматривает селект-звездочку и отдает с некоторой гранулярностью по времени записи, работает ... ну, во много раз быстрее подзапроса. Вопщем на то они есть видимо, что нельзя запросом можно ХП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:50 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34366351&tid=2005634]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 378ms |

| 0 / 0 |
