MySql последняя запись от группы по item_id с порядком по дате - PullRequest
0 голосов
/ 04 ноября 2019

Имя моей таблицы базы данных - бухгалтерские книги, а поля: id, item_id, date, ... другие поля

Я хочу последняя запись из ( groupBy item_id заказ по дате ASC ). из каждой группы. Я попробовал ниже запрос

select 
    `id`, 
    `item_id`, 
    `date`, 
    `opening_quantity`, 
    `closing_quantity`, 
    `item_rate`, 
    `item_value`, 
    `previous_rate` 
from `ledgers` 
where date(`date`) >= ? and date(`date`) <= ? 
group by `item_id` 
order by `date` desc

Можете ли вы, ребята, пожалуйста, помогите.

1 Ответ

2 голосов
/ 04 ноября 2019

Вы можете фильтровать с помощью коррелированного подзапроса:

select t.*
from `ledgers` t
where 
    date(t.`date`) >= ? 
    and date(t.`date`) <= ?
    and t.`date` = (
        select max(t1.`date`)
        from `ledgers` t1
        where t1.`item_id` = t.`item_id`
    )

Для производительности рассмотрите индекс для (item_id, date).

Другой вариант - использовать rank() (доступно в MySQ 8.0только):

select * 
from (
    select 
        t.*,
        rank() over(partition by `item_id` order by `date` desc) rn
    from `ledgers` t
    where  date(t.`date`) >= ? and date(t.`date`) <= ?
) t
where rn = 1
...