Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中的组和顺序_Mysql_Database - Fatal编程技术网

mysql中的组和顺序

mysql中的组和顺序,mysql,database,Mysql,Database,我必须编写一个需要给定输出的查询。 我尝试了不同的查询,但没有成功 实际数据: 我需要这样的输出: 查询如下: 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` `V

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

实际数据:

我需要这样的输出:

查询如下:

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


我认为您在这里所需要的只是一个子查询的附加连接,该子查询查找每个费用id的最新生效日期:


请花几分钟时间修改您的格式。然后,在问题中直接包含示例输入和输出数据。不要粘贴链接。@TimBiegeleisen我是新来的,我没有太多的徽章可以在direct post中包含图片。不要包含图片。时期以表格格式键入您的数据。好的,现在请帮助我。如果我想按“费用”\u id、per和currency列进行分组,那么该怎么办?生效日期取决于这三个参数。我不知道你在想什么。通常,只有在需要聚合某些内容时才使用GROUPBY,但您没有告诉我可能是什么。我建议开始一个新问题,因为这个问题已经得到了回答。堆栈溢出不是博客站点。
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
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;