Git Hub
коротко

SQL: Важность учёта

29 мая 2016, 19:01

Задачка: Важность учёта

Дана таблица поступлений товаров на склады компании следующего формата:

create table incoming (
    storage_id integer not null,
    category_id integer not null,
    quantity integer not null,
    time datetime not null
);

Напишите запрос, который выведет список последнего поступившего количества для каждого склада и категории товара. Таблица должна быть отсортирована по номеру склада (по возрастанию) и категории товара (по возрастанию). Например, для следующей таблицы:

storage_id | category_id | quantity | time
-----------------------------------------------------
1 | 32 | 3 | 2015-03-17 13:55:32
1 | 32 | 8 | 2015-03-17 13:15:22
3 | 32 | 23 | 2015-03-17 14:45:57
1 | 7 | 13 | 2015-03-17 15:56:12
1 | 32 | 7 | 2015-03-17 17:05:37
2 | 17 | 1 | 2015-03-18 13:13:22
1 | 7 | 13 | 2015-03-19 21:53:17

запрос должен возвращать

storage_id | category_id | quantity
----------------------------------------------
1 | 7  | 13
1 | 32 | 7
2 | 17 | 1
3 | 32 | 23

Решение

select storage_id,category_id,quantity
from (select *, DATE_FORMAT(`time`,'%Y%m%d%H') as sortOnTime,  CONCAT(DATE_FORMAT(`time`,'%Y%m%d'), storage_id ) as days 
from incoming  ORDER BY sortOnTime DESC )s 
GROUP BY days
ORDER BY storage_id , category_id

в запросах для production запросы вида select *,.. лучше не использовать а перечислять жёстко все необходимые поля

Поделиться
1 комментарий
Замечание

! данный запрос использует «файловую» сортировку это минус и его стоит учитывать.

Популярное