Помогите с запросом : запутался с датами

Ekklipce

Новичок
Помогите с запросом : запутался с датами

Решил вынести полную задачу в отдельный файл :
тоже самое здесь http://phpclub.ru/talk/showthread.php?s=&postid=374021,
но там оно как-то не заметно

Итак, исходные данные :

Table general (только используемые поля)
id---magazine---date_issue--прочие поля..
1----83-----------2004-02-18--...
2----83-----------2004-02-18--...
3----83-----------2004-02-18--...
4----83-----------2004-02-18--...

Table discount_vol (скидки, разные к примеру за каждый месяц)
id------date_change--sum---rate
83-----2004-01-01---2000--40
83-----2004-01-01---2500--45
83-----2004-02-01---2000--30
83-----2004-02-01---2500--35
83-----2004-02-01---3000--40
83-----2004-03-01---2500--25
83-----2004-03-01---2500--20
83-----2004-03-01---3000--15

Для поля 83 надо получить данные из discount_vol по дате, меньшей чем general.magazine, то есть

id------date_change--sum---rate
83-----2004-02-01---2000--30
83-----2004-02-01---2500--35
83-----2004-02-01---3500--30

помогите с запросом.. наверно юзать нажно MAX(discount_vol.date_change),
с условием типа general.date_issue > discount_vol.date_change
AND discount_vol.date_change = MAX(discount_vol.date_change)

вот запрос, который выводит все..

SELECT discount_vol.sum AS sum, discount_vol.rate AS rate, discount_vol.date_change
FROM discount_vol, general
WHERE general.magazine = discount_vol.id
AND discount_vol.id = '83'
AND general.date_issue > discount_vol.date_change
GROUP BY discount_vol.sum

при таком запросе выводяться данные по самым первым датам..

id------date_change--sum---rate
83-----2004-01-01---2000--40
83-----2004-01-01---2500--35
83-----2004-02-01---3000--35

НУЖНО по датам ближайщим к general.magazine - 2004-02-18 - но меньше их, то есть :

id------date_change--sum---rate
83-----2004-02-01---2000--30
83-----2004-02-01---2500--35
83-----2004-02-01---3500--30

в конечном итоге сумма sum будет уникальной, по ней и группирую, иначе - большое количество результатов получаеться.. чуть ли не на каждую запись в general
 

Dallas

Guest
Почему ты говоришь, что должен получить:
id------date_change--sum---rate
83-----2004-02-01---2000--30
83-----2004-02-01---2500--35
83-----2004-02-01---3500--30

а не:
d------date_change--sum---rate
83-----2004-01-01---2000--40
83-----2004-01-01---2500--45
83-----2004-02-01---2000--30
83-----2004-02-01---2500--35
83-----2004-02-01---3000--40

?
 

Ekklipce

Новичок
Originally posted by Dallas
Почему ты говоришь, что должен получить:
id------date_change--sum---rate
83-----2004-02-01---2000--30
83-----2004-02-01---2500--35
83-----2004-02-01---3500--30

а не:
d------date_change--sum---rate
83-----2004-01-01---2000--40
83-----2004-01-01---2500--45
83-----2004-02-01---2000--30
83-----2004-02-01---2500--35
83-----2004-02-01---3000--40

?
потому что нужно имено по уникальному полю sum получить последнее значение.. в верхнем случае варианты за 2004-01-01 не катят так как есть более поздние :).. но меньше чем 2004-02-18

-~{}~ 26.08.04 12:07:

Проблему решил по другому..

почему-то база может выдать сумма и её последнюю дату, то почему-то без скидки - до сих пор не знаю почему :

SELECT discount_vol.sum AS sum, MAX(discount_vol.date_change) AS date
FROM discount_vol, general
WHERE general.magazine = discount_vol.id
AND discount_vol.id = '83'
AND general.date_issue > discount_vol.date_change
GROUP BY sum

потом rate -
SELECT rate FROM discount_vol
WHERE id = '83' AND date_change = '$date' AND sum = '$sum'

тупо, но почему-то работает
 
Сверху