mysql - mysql中的分组和顺序

标签 mysql database

我必须编写一个需要给定输出的查询。 我尝试了不同的查询,但没有成功。

实际数据:

enter image description here

我需要如下输出: enter image description here

查询如下:

SELECT VCD.id,VCD.effective_date, `VCD`.`charge_id`, `C`.`head`, 
`VCD`.`per`, `VCD`.`currency`, `VCD`.`amount`, `VCD`.`remarks` 
FROM `vendor_charge` `VC` INNER JOIN `vendor_charge_details` `VCD` 
ON `VC`.`id` = `VCD`.`vc_id` LEFT JOIN `charges` `C` 
ON `C`.`id` = `VCD`.`charge_id` 
WHERE `VC`.`vendor_id` = '12' AND `VCD`.`effective_date` <= '2018-05-22' 
GROUP BY `VCD`.`charge_id`, `VCD`.`per`, `VCD`.`currency` 
ORDER BY `C`.`head` DESC

SELECT VCD.id,VCD.effective_date, `VCD`.`charge_id`, `C`.`head`, 
`VCD`.`per`, `VCD`.`currency`, `VCD`.`amount`, `VCD`.`remarks` 
FROM `vendor_charge` `VC` INNER JOIN `vendor_charge_details` `VCD` 
ON `VC`.`id` = `VCD`.`vc_id` LEFT JOIN `charges` `C` 
ON `C`.`id` = `VCD`.`charge_id` 
WHERE `VC`.`vendor_id` = '12' AND `VCD`.`effective_date` <= '2018-05-22' 
GROUP BY `VCD`.`charge_id`, `VCD`.`per`, `VCD`.`currency` 
ORDER BY `VCD`.`effective_date` DESC

最佳答案

我认为您在这里需要的只是对子查询的额外联接,该子查询查找每个 charge_id 的最新 effective_date :

SELECT
    VCD.id,
    VCD.effective_date,
    VCD.charge_id,
    C.head,
    VC.per,
    VCD.currency,
    VCD.amount,
    VCD.remarks
FROM vendor_charge VC
INNER JOIN vendor_charge_details VCD
    ON VC.id = VCD.vc_id
INNER JOIN
(
    SELECT charge_id, MAX(effective_date) AS max_effective_date
    FROM vendor_charge_details
    GROUP BY charge_id
) t
    ON VCD.charge_id = t.charge_id AND VCD.effective_date = t.max_effective_date
LEFT JOIN charges C
    ON C.id = VCD.charge_id
WHERE VC.vendor_id = '12' AND VCD.effective_date <= '2018-05-22'
ORDER BY
    C.head DESC;

关于mysql - mysql中的分组和顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50637337/

相关文章:

mySQL 查看行是否存在

sql - 在同一张表中扩展问题多对多关系

mysql - MySQL 回滚失败

mysql - mysql数据库表中的pkey

sql - VS 2013 中是否有 localdb (mdf) 的级联删除选项

mysql - 如何远程拉取mysql数据库?

php - Mysqli 准备好的插入语句总是返回 false

mysql - 滑动,可变 "window",行密度最高

sql - 在数据库 Rails 中存储动态数字

database - 水平扩展 Postgres