![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Вот и я ж о том. Уровень Ваших вопросов говорит о том, что Вами SQL начального уровня еще не освоен. Это же задание претендует елси не на высшую лигу, то минимум на выше среднего. Если Вы пытаетесь выдать себя за того, кем не являетесь, это очень похоже на обан. Участвовать в этом обмане, как то не сильно хочется. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
asdfghjkl |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 9.9.2009 Репутация: нет Всего: нет |
я не хочу слишком умное решение, хотя бы просто показать, что пробовала. Дело в том, что последний раз работала с БД месяцев 10 назад, навык утрачен, но хочу поднапрячся. А там у них свое дополнительное обучение будет, думаю справлюсь. Это кстати, часть задания, сложная. Что попроше я уже сделала, они одобрили, попросили, мои размышления по поводу вот этого. |
|||
|
||||
Zloxa |
|
||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
На MySql должно проканать.
Если пара id, duration не уникальна - будут завихрения(как и в первом запросе). Принцип - тот же.
Добавлено через 14 минут и 42 секунды Перемудрил. Проще:
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||
|
|||||
asdfghjkl |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 9.9.2009 Репутация: нет Всего: нет |
Спасибочки, буду разбираться перед отправкой, кстати все намного понятней для моего восприятия, только один вопрос: start_of_group еще кое-где встречала, это имеет специальное значение или такое название?
|
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Нет. Это общепринятое название метода. Я даже знаю где Вы это встречали. Обычно так называют это поле для того, чтобы читающему было понятно о чем речь, и можно было легко найти по ключевому слову. На том ресурсе, где Вы встерчали этот термин, уже давно гнушаются отвечать на подобные вашему вопросы. Типичный ответ там на ваш вопрос - "STFF start_of_goup" Это сообщение отредактировал(а) Zloxa - 10.9.2009, 13:06 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
asdfghjkl |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 9.9.2009 Репутация: нет Всего: нет |
Правильно я поняла?:
В строках 25, 26- строка таблицы соединяется сама с собой. В 24- проверка на неизменность статуса, группируются блоки. Я наверное задам глупый вопрос, но все же: что происходит в 27, 29-32? |
|||
|
||||
asdfghjkl |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 9.9.2009 Репутация: нет Всего: нет |
Пересмотрела, наверное :в 25-31 соединение двух последовательных строк по одному id с присвоением grpid.
в 23- устанавливается 1 в первый отличный статус. Засмейте меня, но не пойму зачем сумма? |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Сумма нужна для того, чтобы сложить единички. Нам нужно выделить группы подряд идущих значений. Для того, чтобы можно делать группировку, нам необходимо чтобы строки в пределах одной группы имели одинаковое значение по полю группировки. Необходимо так же, чтобы это значение различалось у разных групп. Что мы можем сделать? Мы можем сравнить каждую строчку со следующей и найти начало( или конец) группы. Но как присвоить идентификатор всей группе? Пометить начало каждой группы единичкой и пустить накапливающую сумму по ней. В результате получим такую сумму:
Так как единички определяют начало группы, то сумма этих единичек обозначает порядковый номер группы Теперь по этому значению можно группироваться. Это сообщение отредактировал(а) Zloxa - 10.9.2009, 15:13 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Еще один способ. Идея заимствована у Azket.
Должно работатать еще и на MS SQL. Достаточно легко переписывается на каунт. Оверхеда меньше чем в предыдущем варианте. При первом взгляде кажется что может дать не верный результат. При втором взгляде кажется что первый взгляд - кажется. Так что если ктото придумает на каких исходных данных результат окажется не корректным(кроме не уникальных id,moment), буду только рад.
Это сообщение отредактировал(а) Zloxa - 10.9.2009, 16:09 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
asdfghjkl |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 9.9.2009 Репутация: нет Всего: нет |
Ну спасибо, а я дурак думала, что единички складываются в одну общую сумму по всей таблице, т.е. сумма будет показывать количество групп.
|
|||
|
||||
Simpliest |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: нет Всего: 3 |
Угу, тред читается на одном дыхании
А последний момент, просто кульминация. Конспирология в действии. Это я к чему, да к тому, что знание SQL как езда на велосипеде. Ты можешь забыть нюансы, но не разучится ездить. P.S. не люблю я таких ТС :( |
|||
|
||||
Gluttton |
|
||||||||||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Жутко хотелось поучаствовать, но на работе сегодня был загруженый день... Да и когда за решение взялся не всё так просто оказалось ![]() Итак...
Я думаю, что это задание не столько на "результат" сколько на "рассуждение" и возможно это умышленно внесенная ошибка, но если подходить к решению исключительно формально, то можно предположить, что для id=2, необходимо выводить не просто продолжительность, а сумму продолжительности с накоплением. О как ![]() Начну со своего крокодила ![]()
Не буду коментировать этот код, а прокоментирую приведенный ниже. Что бы хоть как то облагородить запрос использовал CTE (а вот тут уже начинаються отличия серверов, на сколько знаю, на MS SQL должно пойти) и вот, что получилось:
Отмечу, что второй запрос преобразуется в первый простым "разворачиванием" CTE, без всяких любых других преобразований. А теперь - картинки ![]() На следующих исходных данных: ![]() Запрос вернет следующие данные: ![]() "Усилим" тестовый набор данных: ![]() Кстати на эти данные показывают следующую неопределенность: прерывать ли подсчет периода при смене id, но при том же status? Я например прерываю, а может и не нужно? Получаем результат: ![]() Т.е. сумма с накоплением для id=2 работает. Теперь о запросе. Очевидно, что это
"Шелуха" для обеспечения выдуманой мною суммы с накоплением... Внутри остается (убрал преобразование интервала времени в целое, что бы глаза не мозолило):
Вот результат запроса для меток 1-7: ![]() А на метках 11-18, мы для каждого отобраного (на этапе 1-7) значения moment находим максимальную границу (при "неприрывном" status и id) и вычисляем их разницу... Как всегда, запрос у Zloxa лаконичнее ![]() ![]() Это сообщение отредактировал(а) Gluttton - 11.9.2009, 12:12 -------------------- Слава Україні! |
||||||||||||
|
|||||||||||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Gluttton, спасибо что поддержал.
Сени уже поздно, и я уж малость вина выпил. Завтра повзрываю себе мозг твоими выкладками. Оппа... в FB есть? Для меня новость, спасибо ! upd А в with FB рекурсию держит? как это в MSSQL и DB2. Оракля не держит, а жаль... мне кажется чудная возможность, чудное поле для извращений ![]() Это сообщение отредактировал(а) Zloxa - 11.9.2009, 00:32 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Зато теперь я знаю, что такое upd ![]() Да поддерживает (используется в частности для обхода, деревьев). -------------------- Слава Україні! |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |