|
Можно ли решить средствами только SQL?
|
|||
---|---|---|---|
#18+
Hi All. Появилась проблема, которую хотелось бы решить средствами SQL: Есть таблица из двух полей (дата и значение): Код: plaintext 1. 2. 3.
подсчитать количество (этих количеств м.б. несколько) записей в группах, у которых поле "date" различается не более чем на один день и при этом "value", к примеру, больше 10. Пример: 01.07.2010, 17 02.07.2010, 15 03.07.2010, 1 04.07.2010, 24 05.07.2010, 11 07.07.2010, 15 Подсчитать все последовательности со 2.07.2010 по 7.07.2010 где даты идут подряд и value > 10. Ответ: 1 2 1 В Oracle можно на PL/SQL что-нибудь придумать, а вот в рамках SQLite я что-то плохо себе представляю, как такое изобразить. Заранее спасибо. Всем удачи и интересной работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2010, 18:27 |
|
Можно ли решить средствами только SQL?
|
|||
---|---|---|---|
#18+
Задача не совсем понятна, но решается подобное запросто. OLAP для бедных: 1) Убеждаешься что исходный набор можно отсортировать. 2) Загоняешь исходный набор во временную таблицу которая будет иметь два дополнительных поля: номер записи и флаг записи. Нумеруешь все записи. 3) Проходишь по временной таблице и сравниваешь каждую запись с предыдущей (они же уже пронумерованы). В зависимости от результат сравнения устанавливаешь или снимаешь флаг. 4) Делаешь выборку из времянки на основе флага. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2010, 19:17 |
|
Можно ли решить средствами только SQL?
|
|||
---|---|---|---|
#18+
2Автор. В Oracle шаришь? Вот тебе вариант под ANSI-SQL, но с использованием оракловых функций по работе со строками и датами (to_char, ||, date arifmetic): Как вариант: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 08:29 |
|
Можно ли решить средствами только SQL?
|
|||
---|---|---|---|
#18+
Добрый Э - Эх2Автор. В Oracle шаришь? Вот тебе вариант под ANSI-SQL, но с использованием оракловых функций по работе со строками и датами (to_char, ||, date arifmetic): Как вариант: Код: 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.
Выделенное, конечно же, следует заменить на такое: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 12:26 |
|
Можно ли решить средствами только SQL?
|
|||
---|---|---|---|
#18+
2 Добрый Э - Эх: Да, это действительно хорошее решение. Очень хорошее. Было чувство, что как-то можно, но не доходило, как именно. :-) Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 18:40 |
|
Можно ли решить средствами только SQL?
|
|||
---|---|---|---|
#18+
2 White Owl: автор1) Убеждаешься что исходный набор можно отсортировать. ... Так как данных очень и очень много (миллионы результатов измерений), то временные таблицы - сильно накладно в данном конкретном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 18:45 |
|
Можно ли решить средствами только SQL?
|
|||
---|---|---|---|
#18+
А что, в SQLite WITH появилось ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:05 |
|
Можно ли решить средствами только SQL?
|
|||
---|---|---|---|
#18+
Dmitry ArefievА что, в SQLite WITH появилось ?Посмотри на ник топикстартера, прочитай внимательно его первый пост. Должно быть понятно, что человек знаком с Oracle. мой пост предназначался топикстартеру, чтобы в синтаксисе понятной и знакомой ему СУБД показать решения поставленной им задачи. Собственно, я же специально сделал акцент на том, что запрос - под Oracle, что требуется его "рихтовка" под SQLite. В моем примере WITH нужен лишь для демонстрации тех данных, на которых работает основной запрос. Основной же запрос использует ANSI-SQL в чистом виде, не считая внутренних оракловых SQL-функций (to_char, ||, и т.д.) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:33 |
|
|
start [/forum/search_topic.php?author=alex_avd&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 442ms |
total: | 622ms |
0 / 0 |