Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];

Вниз

Запрос   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.008 c
1-46761
Sergeys
2003-04-30 20:14
2003.05.15
Как можно обменять два Item-а в ListView


14-46897
Rise
2003-04-28 11:54
2003.05.15
МОжно ли создать сайт на Delphi?


4-47052
_BasiL_
2003-03-18 09:27
2003.05.15
Перехват потока открытия файлов


14-46949
Malder
2003-04-20 16:01
2003.05.15
BlueCon


1-46762
MainKaif
2003-04-30 23:14
2003.05.15
Отлов нажатия клавиши.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский