Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Возможна-ли группировка по хитрому условию?
|
|||
|---|---|---|---|
|
#18+
Есть таблица в которой есть следующие три поля: data uid timestamp - это поле имеет тип TIMESTAMP Скажите пожалуйста, можно ли сделать группировку строк из этой таблицы по полям data, uid и по условию, чтобы в каждой группе нашлась как минимум 1 пара (если группировка по data, uid дала группу из одной строки, то эта строка должна попасть в результат без сравнения timestamp, так как его сравнивать просто не с чем) timestamp'ов между которыми прошло меньше, чем заданный промежуток времени? Если timestamp'ы отсортировать, то сравнивать расстояния придется только между соседними строками. PostgreSQL версии 8.3.1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2008, 20:04 |
|
||
|
Возможна-ли группировка по хитрому условию?
|
|||
|---|---|---|---|
|
#18+
На SQL можно много чего сделать. Только нужно четко представлять себе задачу. По твоему описанию лично я не смог понять, чего же тебе требуется... Приведи тестовый набор данных и тот результа, что на этих данных должен получиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2008, 05:19 |
|
||
|
Возможна-ли группировка по хитрому условию?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2008, 13:40 |
|
||
|
Возможна-ли группировка по хитрому условию?
|
|||
|---|---|---|---|
|
#18+
Пример того, что я хочу получить: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Как видно из примера в первой группе между timestamp'ами прошло менее Х минут. (Для примера пусть будет 5), по этому они должны быть сгруппированы. 4-я строчка не попала в первую группу, так как прошло более чем 5 минут. > бухарь А разве CASE позволит мне посмотреть предыдущие записи группы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2008, 15:55 |
|
||
|
Возможна-ли группировка по хитрому условию?
|
|||
|---|---|---|---|
|
#18+
phprusПример того, что я хочу получить: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Как видно из примера в первой группе между timestamp'ами прошло менее Х минут. (Для примера пусть будет 5), по этому они должны быть сгруппированы. 4-я строчка не попала в первую группу, так как прошло более чем 5 минут. Давай я тебе приведу пример своей реализации, а ты уже сам решишь, насколько моё решение удовлетворяет твоим условиям. В качестве упрощения понимания своего примера я буду использовать целочисленное значение вместо timestamp'а. Пусть есть таблица T (num, data, id, dt) , где: NUM - это просто нумератор УПОРЯДОЧЕННЫХ по DATA, ID, DT строк в таблице (то есть, нумерация строкам была присвоена после выполнения по таблице сортировки вида ORDER BY data, id, dt). Это фиктивное поле я ввел исключительно для того, чтобы было проще объяснять какая строка в какую группу попала. DATA - это аналог твоего поля DATA. Соответственно смысловая нагрузка этого поля ровно такая, как и у тебя. ID - это аналог твоего поля UID. Просто в моей СУБД слово UID является ключевым зарезервированным словом, поэтому его использование без двойных кавычек невозможно. А ставить везде двойные кавычки мне было лень. :) Смысловая нагрузка этого поля ровно такая, как и у тебя. DT - это аналог твоего поля TIMESTAMP. В моей СУБД слово TIMESTAMP также является ключевым зарезервированным словом. Смысловая нагрузка этого поля ровно такая, как и у тебя, с той лишь разницей, что тип у неё integer (просто мне опять же было лень разбираться с арифметикой TIMESTAMP'ов в PostgreSQL). В таблице есть такие данные: Код: plaintext Предположим, что заданный интервал между DT у нас составляет 1. Тогда у нас должны получиться такие группы: 1-я группа, строки 0, 1 2-я группа, строки 2, 3 3-я группа, строки 4, 5, 6 4-я группа, строки 7 5-я группа, строки 8, 9 Если же между DT задать интервал, равный 2, то группы будут такими: 1-я группа, строки 0, 1, 2, 3 2-я группа, строки 4, 5, 6 3-я группа, строки 7 4-я группа, строки 8, 9 Если между DT задать интервал, равный 3, то группы будут такими: 1-я группа, строки 0, 1, 2, 3 4-я группа, строки 4, 5, 6, 7 3-я группа, строки 8, 9 Вот запрос, который делает такого рода разбиение на группы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Если вместо :DELTA поочередно подставлять 1, 2, 3, то получим такого рода результаты: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. З.Ы. GRP_ID - это как раз то поле, кототое показывает принадлежность строки к той или иной группе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 06:11 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35550505&tid=2004027]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 428ms |

| 0 / 0 |
