MySQL - 按日期排序的查询无法获取最新记录

标签 mysql sql

我的数据库设置如下:

http://sqlfiddle.com/#!9/2c5fc

我想要做的是获取每个商店的列表及其最后的预算金额(每个计划的预算总额 * 他们对该计划的分配/100)。

某些商店可能没有为上次预算设置分配,因此我需要他们设置分配的最后预算,如果未设置分配或不存在预算,则为 NULL。

我有以下 SQL 查询:

SELECT s.StoreID,s.CentreID, budgetcalc.amount, budgetcalc.BudgetDate FROM store as s
LEFT JOIN centre on s.CentreID = centre.CentreID
LEFT JOIN (SELECT BudgetDate, SUM(sch.Amount*appt.Percentage/100) as amount, appt.StoreID from budget b
    INNER JOIN schedule as sch on b.BudgetID = sch.BudgetID
    INNER JOIN apportionment as appt on sch.ScheduleID = appt.ScheduleID 
    GROUP BY appt.StoreID, b.BudgetID
    ORDER BY STR_TO_DATE(b.BudgetDate,'%d-%m-%y') DESC
) as budgetcalc on s.StoreID = budgetcalc.StoreID
GROUP BY s.StoreID
ORDER BY s.StoreID, STR_TO_DATE(budgetcalc.BudgetDate,'%d-%m-%y') DESC;

但是,这存在不返回去年的问题,无论我返回子查询的顺序如何,它都会看似随机地返回前一年。

最佳答案

仅从表声明中计算出来是很困难的,但您需要获取每个商店的最新预算日期,然后将其与获取每个商店/预算的预算详细信息的子查询结合起来。

未经测试,但类似这样:-

SELECT s.StoreID,
        s.CentreID, 
        budgetcalc.amount, 
        budgetcalc.BudgetDate 
FROM store as s
LEFT OUTER JOIN centre ON s.CentreID = centre.CentreID
LEFT OUTER JOIN
(
    SELECT appt.StoreID, 
            MAX(BudgetDate) AS latestBudgetDate
    FROM budget b
    INNER JOIN schedule as sch ON b.BudgetID = sch.BudgetID
    INNER JOIN apportionment as appt ON sch.ScheduleID = appt.ScheduleID 
    GROUP BY appt.StoreID
) latest_budget
ON s.StoreID = latest_budget.StoreID 
LEFT OUTER JOIN 
(
    SELECT BudgetDate, 
            appt.StoreID, 
            SUM(sch.Amount*appt.Percentage/100) as amount 
    FROM budget b
    INNER JOIN schedule as sch ON b.BudgetID = sch.BudgetID
    INNER JOIN apportionment as appt ON sch.ScheduleID = appt.ScheduleID 
    GROUP BY appt.StoreID, b.BudgetID
) as budgetcalc 
ON latest_budget.StoreID = budgetcalc.StoreID
AND latest_budget.latestBudgetDate = budgetcalc.BudgetDate
ORDER BY s.StoreID, 
        budgetcalc.BudgetDate DESC;

关于MySQL - 按日期排序的查询无法获取最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34432337/

相关文章:

c# - SQL 代码超时

mysql - SQL 查询使用左连接没有显示结果

MySql 自动递增停在 255

mysql - SQL - 字段除以另一个字段的频率后按比例输出

MySQL 查询在同一个表上有 2 个查询以匹配完全相同的值

mysql - group_concat mysql子查询只返回一项

sql - 为什么要从此查询中获取 9 行?

mysql - 如何处理动态sql查询中的null

javascript - 编辑表单不显示任何数据并且在发布到数据库时无法保存

mysql - 使用 SQL 对某些行进行平均排序