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

Вниз

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

 
Запрос   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.005 c
6-1195190006
Сергей Колесник
2007-11-16 08:13
2008.11.09
Пример работы с WinPCap на дельфях


11-1195302045
KOLBoss
2007-11-17 15:20
2008.11.09
Динамическое создание меню


2-1222860952
Nikefest
2008-10-01 15:35
2008.11.09
Версия проекта


2-1222780319
Alexei
2008-09-30 17:11
2008.11.09
Использование TADOTable


2-1222844827
SkyN
2008-10-01 11:07
2008.11.09
faultrep.dll





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский