Форум: "Прочее";
Текущий архив: 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