Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.09;
Скачать: CL | DM;

Вниз

Запрос, максимальная дата   Найти похожие ветки 

 
Запрос   (2008-09-15 15:48) [0]

Помогите составить запрос. Есть таблица со строками -
 id  tovar     date
- 1, товар1, дата покупки1
2, товар 1, дата покупки2.
3, товар 2, дата покупки3,
4, товар 2, дата покупки4,
----
n , товар n, дата покупки n

Нужно выбрать строки  с инфой о покупке всех товаров на последнюю дату..Чето не могу допедрить - Select * from tab group by tovar, а как выбрать макс дату не пойму.


 
Правильный$Вася   (2008-09-15 15:50) [1]


> выбрать макс дату не пойму.

max(дата)
как ни странно


 
Dmitry S ©   (2008-09-15 15:59) [2]

select * from tovar where date=(select max(date) from tovar)
:) не знаю, криво это или нет, но я бы так сделал


 
Илья Корстин ©   (2008-09-15 16:03) [3]


> elect * from tab group by tovar

И даже ошибки не будет? o_O


 
Запрос   (2008-09-15 16:03) [4]


> select * from tovar where date=(select max(date) from tovar)

Получится, что выберет только покупки с самой максимальной датой. А мне нужно группировать по товарам, т. е. у каждого товара своя макс дата покупки.
вот так сделал select id, tovar, max(date) from tab group by tovar


 
Юрий Зотов ©   (2008-09-15 16:03) [5]

Тут хитрее, если я правильно понял. По каждому товару нужно выбрать запись с максимальной датой по ЭТОМУ товару, а не по ВСЕМ товарам.

Типа:

1 Гвозди жареные           20.12.2008
7 Пиво свежемороженое  14.03.2007


 
Запрос   (2008-09-15 16:05) [6]


> Юрий Зотов ©   (15.09.08 16:03) [5]

Точно


 
Запрос   (2008-09-15 16:08) [7]

select id, tovar, max(date) from tab group by tovar
И чтото это запрос все равно выгружает все..(


 
ANB   (2008-09-15 16:12) [8]

select tovar, max(date) from tovar group by tovar


 
ANB   (2008-09-15 16:13) [9]


> select id, tovar, max(date) from tab group by tovar
> И чтото это запрос все равно выгружает все..(

Странно, что ошибку не выдают, т.к. запрос кривой.


 
stas ©   (2008-09-15 16:16) [10]

select id,tovar,date from tab
inner join (select tovar,max(date) as date1 from tab) as tab1
on tab1.tovar=tab.tovar and tab1.date1=tab.date

так?


 
stas ©   (2008-09-15 16:17) [11]

*(select tovar,max(date) as date1 from tab group by tovar) as tab1


 
Запрос   (2008-09-15 16:20) [12]

Если делаю так
select id, tovar, max(date) from tab group by tovar
То выдает ошибку - id недопустим в списке выбора,  поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Если делаю так -
select id, tovar, max(date) from tab group by tovar
запрос выполняется , но перечислены все строки, то есть группируется по сочетанию id+tovar.
Но ведь мне нужно группировать только по товару, но и id мне тоже нужен


 
Запрос   (2008-09-15 16:21) [13]

2.

> Если делаю так -
> select id, tovar, max(date) from tab group by tovar

select id, tovar, max(date) from tab group by id, tovar


 
Правильный$Вася   (2008-09-15 16:23) [14]


> select id, tovar, max(date) from tab group by tovar
> То выдает ошибку
> select id, tovar, max(date) from tab group by tovar
> запрос выполняется

найдите 10 отличий


 
Запрос   (2008-09-15 16:24) [15]


> найдите 10 отличий

я ниже поправился


>
> select id, tovar, max(date) from tab group by id, tovar


 
Sergey13 ©   (2008-09-15 16:24) [16]

> [0] Запрос   (15.09.08 15:48)

У тебя ошибка в проектировании БД. Если в таблице будут "Конфета Марс", "Марс", "Батончик Марс" и т.д. и т.п. ты замучаешься искать ответа на свой вопрос. Нужен справочник товаров. И тогда
> [8] ANB   (15.09.08 16:12)
тебе поможет.

офф
ANB - какие люди!!! Давненько не захаживал. Привет.


 
Запрос   (2008-09-15 16:29) [17]


>  тебя ошибка в проектировании БД. Если в таблице будут "Конфета
> Марс", "Марс", "Батончик Марс" и т.д. и т.п. ты замучаешься
> искать ответа на свой вопрос. Нужен справочник товаров.
> И тогда

это не к этой проблеме. У меня есть

-1  Сникерс 25.08.2008
2   Сникерс  02.09.2008
3.  Марс  04.09.2008
4. Марс  15.09.2008

Нужно чтобы выбрало
2   Сникерс  02.09.2008
4. Марс  15.09.2008


 
Эсмеральда Вилла-Лобос   (2008-09-15 16:30) [18]

Откуда два разных одинаковых сникерса?


 
Запрос   (2008-09-15 16:31) [19]

> > [8] ANB   (15.09.08 16:12)
> тебе поможет.


ANB мне поможет, если куда-нибудь в запрос вставит id, ибо он мне тоже нужен )


 
Правильный$Вася   (2008-09-15 16:31) [20]


> -1  Сникерс 25.08.2008
> 2   Сникерс  02.09.2008

тогда id тебе не нужен, т.к. это не id товара


 
Sergey13 ©   (2008-09-15 16:32) [21]

> [17] Запрос   (15.09.08 16:29)
> это не к этой проблеме

Это как раз к этой.
Сравни "Марс" и "Mapc".


 
Запрос   (2008-09-15 16:32) [22]


> тогда id тебе не нужен, т.к. это не id товара

Да!! это id последней покупки этого товара. он мне тоже нужен


 
Запрос   (2008-09-15 16:33) [23]


> Сравни "Марс" и "Mapc".

ок, что если вместо Марса будет id этого товара? ничего не поменяется


 
Эсмеральда Вилла-Лобос   (2008-09-15 16:33) [24]

id последней покупки

Но не ид товара.


 
stas ©   (2008-09-15 16:33) [25]

stas ©   (15.09.08 16:16) [10],[11]
не помогло?


 
Эсмеральда Вилла-Лобос   (2008-09-15 16:34) [26]

ок, что если вместо Марса будет id этого товара?

Ты сказало, что это не ид товара, а ид покупки.


 
Запрос   (2008-09-15 16:35) [27]


>
> Но не ид товара.

-1  156   25.08.2008
2   156   02.09.2008
3.  4   04.09.2008
4.  4   15.09.2008

Нужно чтобы выбрало
2   156  02.09.2008
4.   4  15.09.2008
где 156- сникерс, 4 - марс . Что поменялось?


 
Эсмеральда Вилла-Лобос   (2008-09-15 16:36) [28]

да пофик что там нужно.
главное что рядом с марсом есть id и это не id марса.
значит тебе оно не нужно.


 
Запрос   (2008-09-15 16:37) [29]

Раз такая бражка, уточню , мне нужно -
id_покупки, id_товара, макс.датапокупки


 
Sergey13 ©   (2008-09-15 16:37) [30]

> [29] Запрос   (15.09.08 16:37)

СУБД какая?


 
Эсмеральда Вилла-Лобос   (2008-09-15 16:37) [31]

ид товара у тебя нет. по крайней мере его никто здесь не видел


 
Эсмеральда Вилла-Лобос   (2008-09-15 16:38) [32]

СУБД какая?

В россии три главных вопроса.
кто виноват, что делать, и "какая субд?"


 
stas ©   (2008-09-15 16:39) [33]

Эсмеральда Вилла-Лобос   (15.09.08 16:37) [31]
поле tovar это может быть ID товара


 
Запрос   (2008-09-15 16:40) [34]


> СУБД какая?


mssql 2005
> ид товара у тебя нет. по крайней мере его никто здесь не
> видел

Да причем тут это ептить..пояснил же уже, что разницы нет.Наименования там жестко фиксированы, да даже если и разные, то пусть будет группирует по разным. Главное щас результата добиться.


 
Правильный$Вася   (2008-09-15 16:41) [35]


> Раз такая бражка, уточню , мне нужно -id_покупки, id_товара,
>  макс.датапокупки

сначала достаешь товар и его максдату, а потом по этой комбинации достаещь id покупки


 
stas ©   (2008-09-15 16:42) [36]

Правильный$Вася   (15.09.08 16:41) [35]
я ему этот запрос написал минут 30 назад...


 
Запрос   (2008-09-15 16:43) [37]


> stas ©   (15.09.08 16:42) [36]

я разбираюсь...)


 
Sergey13 ©   (2008-09-15 16:47) [38]

> [34] Запрос   (15.09.08 16:40)
как-то так можно попробовать
select t.id,t.tovar, t2.max_date
from tovar t,(select tovar, max(date) max_date from tovar group by tovar) t2
where t.tovar=t2.tovar and t1.date=t2.max_date


 
Запрос   (2008-09-15 16:52) [39]

Спасибо всем..щас ответы скопирую и завтра подумаю...ибо полночь уже..


 
Правильный$Вася   (2008-09-15 16:56) [40]


> Sergey13 ©   (15.09.08 16:47) [38]

здесь есть подводный камень, если один и тот же товар может прийти разными партиями, но в однои то же время


 
_RusLAN   (2008-09-15 16:58) [41]

http://sql.ru/forum/actualthread.aspx?tid=481637


 
stas ©   (2008-09-15 17:00) [42]

Правильный$Вася   (15.09.08 16:56) [40]
А тут 2 варианта либо не выводить id как нужно автору, либо выводить несколько партий на одно и тоже время.


 
ANB   (2008-09-15 17:09) [43]


> ANB - какие люди!!! Давненько не захаживал. Привет.

Привет. Чет заработался.


> ANB мне поможет, если куда-нибудь в запрос вставит id, ибо
> он мне тоже нужен )

если это оракл - то dense_rank, если нет- то все хуже, но подзапросами разруливается.

select
 TM.tovar
 TM.max_date
 (select max(ID) from tovar t where t.tovar = tm.tovar and t.date = tm.max_date)
from
(
select
 tovar
,max(date) max_date
from
 tovar
group by
 tovar
) TM


 
Sergey13 ©   (2008-09-16 08:50) [44]

> [40] Правильный$Вася   (15.09.08 16:56)

Возможно, но если хранится все таки дата-время, то риск стремится к нулю, ИМХО.
К тому же о каких партиях можно говорить если нет даже справочника товров. 8-)


 
passlight ©   (2008-09-16 10:57) [45]

Если правильно понял условия, то можно как-то так :-) :


select
tovar.*
from
tovar join
(
 select
  tovar,
  max(date) as mx
 from
  tovar
 group by tovar
 ) as sub on tovar.tovar = sub.tovar and
             tovar.date = sub.mx



Страницы: 1 2 вся ветка

Текущий архив: 2008.11.09;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.014 c
15-1221319545
Городской Шаман
2008-09-13 19:25
2008.11.09
Starforce это троян?


2-1222781286
Alexei
2008-09-30 17:28
2008.11.09
Действие пользователя


6-1195066750
Алекс_
2007-11-14 21:59
2008.11.09
Номер сокета


6-1194787304
Olegz77
2007-11-11 16:21
2008.11.09
Indy: TIdPop3, TIdMessage


6-1195117224
Potato
2007-11-15 12:00
2008.11.09
смена IP