SQL SELECT минимальных значений. | |
---|---|
FoxProg Автор Сообщений: 150 Дата регистрации: 27.11.2012 |
Добрый день!
Что-то никак не соображу, как правильно сделать SELECT. Есть две таблицы spisok - список людей (id I - уникальный код, fam C - фамилия) и otpusk - таблица, в каком месяце человек брал отпуск (id I - уникальный код, id_fam I - ссылка на spisok.id, god I - год, mes I - месяц) Нужно создать таблицу с информацией когда кто ходил в отпуск за указанный период, например с февраля 2018 по декабрь 2018 Созадю процедурку
id fam god mes 10069 Анисимов 2018 2 10409 Анисимов 2018 5 10632 Анисимов 2018 8 10895 Анисимов 2018 12 10215 Бабич 2018 4 10223 Бабич 2018 5 10255 Бабич 2018 9 10365 Бовкун 2018 3 10634 Бовкун 2018 8 и т.д.Нужно изменить SELECT так, чтобы он выдавал только минимальные значения для каждого человека, т.е. должно быть такое id fam god mes 10069 Анисимов 2018 2 10215 Бабич 2018 4 10365 Бовкун 2018 3 и т.д. |
Re: SQL SELECT минимальных значений. | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: SQL SELECT минимальных значений. | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Если года разные, то два минимума могут дать не корректный результат
Тут проще сделать "в лоб" переформулировав запрос "на человеческом языке" следующим образом Отобрать записи, для которых не существует записей по тому же самому человеку, но с датой отпуска меньше, чем выбранная
Исправлено 2 раз(а). Последнее : Владимир Максимов, 26.12.18 16:40 |
Re: SQL SELECT минимальных значений. | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
В общем случае ДА! ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: SQL SELECT минимальных значений. | |
---|---|
ВладимирС Сообщений: 1693 Дата регистрации: 03.11.2005 |
Не знаю, подойдет ли мой вариант:
Результат: ID_Fam God Mes Анисимов 2018 2 Бабич 2018 4 Бовкун 2018 3 |
Re: SQL SELECT минимальных значений. | |
---|---|
FoxProg Автор Сообщений: 150 Дата регистрации: 27.11.2012 |
Спасибо за ответы, НО!
To PaulWist и ВладимирС - у меня две таблицы!
To Владимир Максимов Минимальную и максимальную дату я буду передавать, как параметры, поэтому сразу в фоксе могу привести их к нужному виду. Преобразовывать в строку или в число в приципе одно и то же, но Ваш метод лучше - во-первых, короче, а во-вторых, SQL при сравнении чисел работает гораздо быстрее, чем строк (я так думаю) Сами выборки уж больно сложные. Должно быть все гораздо проще.
DECLARE @nDate1 Int = 201802, @nDate2 Int = 201812почему-то выдает ошибку Cannot assign a default value to a local variable. У меня MSSQL 2005 Вот такой SELECT
id_fam min_date 352 201803 360 201802 400 201804Теперь бы вставить туда фамилии... Вот такой селект выдает мне все записи - фамилии со всеми годами и месяцами
Хотя на сайте stackoverflow.com такая конструкция приведена:
|
Re: SQL SELECT минимальных значений. | |
---|---|
FoxProg Автор Сообщений: 150 Дата регистрации: 27.11.2012 |
Забыл еще добавить...
Вот такой селект
Исправлено 1 раз(а). Последнее : FoxProg, 27.12.18 11:05 |
Re: SQL SELECT минимальных значений. | |
---|---|
FoxProg Автор Сообщений: 150 Дата регистрации: 27.11.2012 |
Решил
|
Re: SQL SELECT минимальных значений. | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Разумеется. Испокон веков даты задавались как строки в апострофах (одинарных кавычках). DECLARE @nDate1 Int = '20180201', @nDate2 Int = '20181201' ------------------ Лень - это неосознанная мудрость. |
Re: SQL SELECT минимальных значений. | |
---|---|
FoxProg Автор Сообщений: 150 Дата регистрации: 27.11.2012 |
У меня не дата, у меня Int И почему тогда
Cannot assign a default value to a local variable"Невозможно присвоить значение по умолчанию локальной переменной" Он еще на типы пока не смотрит, говорит, что это действие Нельзя. А вот эти примеры работают абсолютно одинаково
|
Re: SQL SELECT минимальных значений. | |
---|---|
pasha_usue Сообщений: 3650 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Нет в 2005 такого синтаксиса ещё. Он в 2008 появляется. |
Re: SQL SELECT минимальных значений. | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Через алиасы (псевдонимы) попробуйте
Зависит от того, какую итоговую информацию в выборке Вы хотите получить. Приведенный выше запрос позволяет получить любую информацию из найденной записи ближайшего отпуска. Если же вам нужно только собственно найденное минимальное значение, то можно и простой группировкой
A % B - это целочисленный остаток от деления A/B, что здесь и нужно Если делятся два целых числа, то результат будет целое число. В этом случае остаток будет отброшен. Округления не будет. |
Re: SQL SELECT минимальных значений. | |
---|---|
FoxProg Автор Сообщений: 150 Дата регистрации: 27.11.2012 |
Точно! Спасибо! Ух ты! Оказывается можно еще проще! Спасибо! |
© 2000-2024 Fox Club  |