Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.54 MB
Время: 0.016 c
1-46820
region
2003-05-02 21:59
2003.05.15
TListBox


14-46953
yoyoyo
2003-04-26 17:04
2003.05.15
DGlut.pas


6-46891
Юров Владимир
2003-03-18 08:49
2003.05.15
Курс доллара


14-46947
Knight
2003-04-09 23:34
2003.05.15
В чём смысл жизни....


1-46807
saty
2003-05-02 15:23
2003.05.15
квадратный массив