metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-07-09 08:34 am

SQL извраты

Не хватает в SQL аггрегирующей операции типа MIN или MAX(поле1, поле2, поле3), т.е. минимум или максимум тупла из полей. Операция сравнения задана обычным образом - сначала сравниваем первое поле, если больше-меньше, то возвращаем результат, если равны - переходим к следующему, итд.
Тогда можно было бы простым образом решать классическую задачу "при группировке выбрать значения некоторых полей в тех записях, где заданное поле имеет минимальное или максимальное значение". Типа например "состояние объекта на начало и конец дня" - группируем по дням и объектам, а аггрегацию делаем в виде MIN(DT,STATUS) и MAX(DT,STATUS).

[identity profile] nolar.livejournal.com 2009-07-09 06:04 am (UTC)(link)
http://www.postgresql.org/docs/8.4/interactive/functions-conditional.html#AEN15291
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_least
Oracle тоже.

Мне вообще почему-то казалось что это ANSI SQL.

[identity profile] metaclass.livejournal.com 2009-07-09 06:13 am (UTC)(link)
Не, нестандартные. И по ходу, они как бы и реляционной модели противоречат. Мы можем сравнивать только одинаковые по смыслу величины, а если такие величины расположены не в отдельных записях, а в ряд полей внутри одной(где эту функцию и можно применить тогда), то это тонкое издевательство на нормальными формами :)