SQL извраты
Jul. 9th, 2009 08:34 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Не хватает в SQL аггрегирующей операции типа MIN или MAX(поле1, поле2, поле3), т.е. минимум или максимум тупла из полей. Операция сравнения задана обычным образом - сначала сравниваем первое поле, если больше-меньше, то возвращаем результат, если равны - переходим к следующему, итд.
Тогда можно было бы простым образом решать классическую задачу "при группировке выбрать значения некоторых полей в тех записях, где заданное поле имеет минимальное или максимальное значение". Типа например "состояние объекта на начало и конец дня" - группируем по дням и объектам, а аггрегацию делаем в виде MIN(DT,STATUS) и MAX(DT,STATUS).
Тогда можно было бы простым образом решать классическую задачу "при группировке выбрать значения некоторых полей в тех записях, где заданное поле имеет минимальное или максимальное значение". Типа например "состояние объекта на начало и конец дня" - группируем по дням и объектам, а аггрегацию делаем в виде MIN(DT,STATUS) и MAX(DT,STATUS).
no subject
Date: 2009-07-09 05:55 am (UTC)min(least()), max(greatest())?
no subject
Date: 2009-07-09 06:00 am (UTC)no subject
Date: 2009-07-09 06:04 am (UTC)http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_least
Oracle тоже.
Мне вообще почему-то казалось что это ANSI SQL.
no subject
Date: 2009-07-09 06:13 am (UTC)no subject
Date: 2009-07-09 06:02 am (UTC)Я говорю про аггрегирующую функцию для туплов из полей. Т.е. сравниваются не поля из списка, а туплы составленные из полей в разных записях при аггрегации.
no subject
Date: 2009-07-09 06:06 am (UTC)Вообще это типа лексографического сравнения. Хотя вот насчёт нескольких полей не уверен что умеют они так. Разве что конкатинировать.
no subject
Date: 2009-07-09 06:10 am (UTC)no subject
Date: 2009-07-09 08:40 am (UTC)no subject
Date: 2009-07-09 09:01 am (UTC)no subject
Date: 2009-07-09 09:59 am (UTC)no subject
Date: 2009-07-09 10:53 am (UTC)нестандарт, разумеется.
склеивать в строку -- тоже вариант, но некоторые значения слишком велики могут быть (строки, например).
no subject
Date: 2009-07-09 11:55 am (UTC)no subject
Date: 2009-07-09 05:55 pm (UTC):)))
Если кроме шуток, то возможно почти все, но в каждом случае будет очень сильно зависеть от конкретной СУБД.