Текущий архив: 2003.05.15;
Скачать: CL | DM;
Вниз
Запрос Найти похожие ветки
← →
Ann (2003-04-24 09:23) [0]Доброго дня!
Подскажите пожалуйста..никак не могу правильно написать такой запрос
имеется одна таблица, в ней есть номер артикула и наименование и вторая таблица, в ней каждому номеру артикула может соответствовать несколько записей с датой. Нужно чтобы запрос выдавал строку в номером артикула, наименованием и МАКСИМАЛЬНОЙ датой..
← →
ЮЮ (2003-04-24 09:33) [1]Строк нужно стольк, сколько в 1-ой таблице или сколько имеется во второй (по одной на артикул) ? И БД какая?
← →
Johnmen (2003-04-24 09:34) [2]Приведи структуру таблиц и структуру результирующего НД.
Короче, схему входа-выхода...:)
← →
Igor (2003-04-24 09:34) [3]Это не дает нужный результат?
select таблица1.номер_артикула, таблица1.наименование, max (таблица2. дата)
from таблица1,таблица2
where таблица1.номер_артикула=таблица2.номер_артикула
← →
Соловьев (2003-04-24 09:35) [4]
select t1.art_num, t1.art_name, max(t2.date)
from table_art t1 join table_date t2 on t1.art_num=t2.art_num
← →
ЮЮ (2003-04-24 09:41) [5]Igor (24.04.03 09:34)
Соловьев © (24.04.03 09:35)
А где же GROUP BY ???
← →
Ann (2003-04-24 09:41) [6]почему-то ругается на MAX
← →
Соловьев (2003-04-24 09:43) [7]:(
+
group by t1.art_num, t1.art_name
← →
Zacho (2003-04-24 09:44) [8]
> Ann © (24.04.03 09:41)
Ругается скорее всего не на MAX, а на отсутствие GROUP BY
P.S. Если хочешь получить вразумительный ответ - приводи подробную информацию, например текст сообщения об ошибке, а так только гадать остается.
← →
Ann (2003-04-24 10:05) [9]ругался на отсутствие группировки, с тремя полями прошло легко, а когда добавила еще 3 поля из 2-ой таблице опять ругается
запрос получился такой
SELECT
SPR.ART_ID,
SPR.NAME,
max(SPR_A.RDATA),
SPR_A.GOST,
SPR_A.EAN13,
SPR_A.DELETE_PR
FROM
SPRART SPR,
SPRARTP SPR_A
where (SPR_A.ART_ID=SPR.ART_ID)
group by spr.art_id, spr.name
а ругается так
invalid token
invalid column reference
← →
Соловьев (2003-04-24 10:06) [10]в групировку надо включать все поля кроме агрегатных.
← →
Ann (2003-04-24 10:10) [11]выдает три записи, вместо одной, и дату вообще не выводит.. :(
← →
Ann (2003-04-24 10:12) [12]хотя нет, дату выводит, но выводит все записи, если добавляю поля
← →
Соловьев (2003-04-24 10:16) [13]
> если добавляю поля
понятно... групировка же идет по всем полям...
← →
Igor (2003-04-24 10:18) [14]2ЮЮ © Н-да.. тормознул.
2Ann Определитесь с задачей.
← →
Ann (2003-04-24 10:19) [15]а что же делать?? :((
← →
Ann (2003-04-24 10:20) [16]как определиться? мне нужна строка состоящая из кода и наименования в первой таблице + строка с максимальной датой во второй таблице + все поля из второй таб.
← →
Соловьев (2003-04-24 10:21) [17]про СУБД например рассказать?
← →
Zacho (2003-04-24 10:22) [18]
> Ann © (24.04.03 10:12)
Разберись как работает агрегирование и группировка, и если сама не сможешь написать нужный тебе запрос, то напиши подробно о структуре данных и какой результат ты хочешь получить.
← →
Zacho (2003-04-24 10:26) [19]
> Ann © (24.04.03 10:20)
Если я правильно понял, то так:
SELECT
SPR.ART_ID,
SPR.NAME,
SPR_A.RDATA,
SPR_A.GOST,
SPR_A.EAN13,
SPR_A.DELETE_PR
FROM
SPRART SPR,
SPRARTP SPR_A
where (SPR_A.ART_ID=SPR.ART_ID) AND SPR_A.RDATA=(SELECT MAX(S.RDATA) FROM SPRATR S WHERE S.ART_ID=SPR.ART_ID)
← →
Ann (2003-04-24 10:30) [20]структура первой таблицы
ART_ID,
NAME,
DELETE_PR,
GROUP_ID
структура второй таблицы
ART_ID,
GOST,
EAN13,
DELETE_PR,
RDATA
нужно получить в результате запроса строку содержащую из 1 таб. art_id,name из второй запись соответствующая певой по art_id, (нужны все поля из 2 таб), записи 1 таб может соответсвовать много записей во 2, нужно взять только 1, с максимальной датой
← →
Zacho (2003-04-24 10:35) [21]
> Ann © (24.04.03 10:30)
Смотри Zacho © (24.04.03 10:26)
← →
Igor (2003-04-24 10:35) [22]А то что Zacho предложил не удовлетворяет? Почему?
← →
Ann (2003-04-24 10:37) [23]попробывала.. выдает 3 записи вместо одной :(
← →
Zacho (2003-04-24 10:39) [24]
> Ann © (24.04.03 10:37)
Подробнее... Вместо какой одной ? Что все-таки получить надо ? Приведи пример с конретными данными.
← →
Ann (2003-04-24 10:46) [25]одной записи в первой таблице соответсвуют 3 записи во второй, в результате запроса должна быть одна с максимальной датой, а он все выводит, т.е. мах не помогает
← →
Zacho (2003-04-24 10:48) [26]
> Ann © (24.04.03 10:46)
Что-то ты не договариваешь. Какие первичные ключи у таблиц ? Нет ли во второй таблице записей с одинаковыми RDATA и ART_ID ? Если есть, то какая именно из этих записей тебе нужна ?
← →
Ann (2003-04-24 10:52) [27]с одинаковыми RDATA и ART_ID записей нет, первичные ключи по art_id
← →
Zacho (2003-04-24 10:54) [28]
> Ann © (24.04.03 10:52)
> с одинаковыми RDATA и ART_ID записей нет
Не верю. Тогда бы запрос правильно отрабатывал. И, все-таки, а если есть ? Какая тогда запись тебе нужна ?
← →
Ann (2003-04-24 10:57) [29]зря не веришь, там всего три записи, за1,23 и 24 чило, так что точно нет одинаковых... эх..
← →
Zacho (2003-04-24 11:03) [30]
> Ann © (24.04.03 10:57)
Ну проверь, что вернет SELECT MAX(S.RDATA) FROM SPRATR S WHERE S.ART_ID=SPR.ART_ID с SPR.ART_ID равным тому ID для которого выбирается три записи вместо одной.
← →
Ann (2003-04-24 11:08) [31]уря!!! получилось!! :)))
спасибо тебе большущее!!
там просто в твоем запросе была объявлена таблица sprart как s, а не sprartp
спасиб, спасиб!!! :)
← →
Zacho (2003-04-24 11:09) [32]И все-таки подозреваю, что в таблице SPRARTR у тебя должен быть первичный ключ (ART_ID,RDATA). Иначе, действительно, какую запись ты будешь выбирать, если для одного ART_ID окажется несколько записей с одинаковым RDATA ?
← →
Zacho (2003-04-24 11:11) [33]
> Ann © (24.04.03 11:08)
Рад что получилось :-) , но подумай все-же над Zacho © (24.04.03 11:09)
← →
Ann (2003-04-24 11:15) [34]мда.. здесь ты пожалуй прав.. надо бы, но у меня проверка соит на то чтобы их не было (при записи в таблицу)
← →
Zacho (2003-04-24 11:20) [35]
> Ann © (24.04.03 11:15)
Проще (и работать быстрее будет) сделать ПК (ART_ID,RDATA)
← →
Ann (2003-04-24 11:23) [36]Согласна :)
Страницы: 1 вся ветка
Текущий архив: 2003.05.15;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.007 c