gpt4 book ai didi

mysql - 建议聚合 View 的 WHERE 子句中的动态日期的解决方法

转载 作者:行者123 更新时间:2023-11-29 17:28:33 25 4
gpt4 key购买 nike

我认为聚合和团体的工资 stub 的生效日期是过去的:

SELECT 
`pay_stubs`.`employee_id` AS `employee_id`,
YEAR(`pay_stubs`.`effective_date`) AS `year`,
QUARTER(`pay_stubs`.`effective_date`) AS `quarter`,
ROUND(SUM(`pay_stubs`.`gross`), 2) AS `gross`
-- more summed fields here --
FROM
`pay_stubs`
WHERE
(`pay_stubs`.`effective_date` <= CURDATE())
GROUP BY `pay_stubs`.`employee_id`, YEAR(`pay_stubs`.`effective_date`) , QUARTER(`pay_stubs`.`effective_date`)
ORDER BY YEAR(`pay_stubs`.`effective_date`) , QUARTER(`pay_stubs`.`effective_date`) , `pay_stubs`.`employee_id`

我在很多方面使用这个 View 。我查询它以获取特定的employee_ids 集合;我查询特定年份和/或季度。我什至有基于此 View 的 subview 。

我希望能够将日期传递给此 View 以代替 CURDATE() 使用。然后我可以要求提供截至特定时间的汇总数据。这可以让我测试过去或 future 的数据。但是由于您无法将参数传递给 MySQL 中的 View ,因此该 View 与系统时间结合在一起。

如何在 MySQL View 的 where 子句中实现动态日期之类的功能?

如果我将其设为存储过程,我可以传递日期参数,但这样我就失去了 View 的优势。

最佳答案

恕我直言,最简单的方法是从 View 中完全删除 where 子句:

SELECT 
`pay_stubs`.`employee_id` AS `employee_id`,
YEAR(`pay_stubs`.`effective_date`) AS `year`,
QUARTER(`pay_stubs`.`effective_date`) AS `quarter`,
ROUND(SUM(`pay_stubs`.`gross`), 2) AS `gross`
-- more summed fields here --
FROM
`pay_stubs`
GROUP BY `pay_stubs`.`employee_id`, YEAR(`pay_stubs`.`effective_date`) , QUARTER(`pay_stubs`.`effective_date`)
ORDER BY YEAR(`pay_stubs`.`effective_date`) , QUARTER(`pay_stubs`.`effective_date`) , `pay_stubs`.`employee_id`

并且仅在查询时应用条件,例如:

SELECT 
*
FROM
`pay_stubs`
WHERE
`employee_id` = 123 AND .`effective_date` <= CURDATE()

关于mysql - 建议聚合 View 的 WHERE 子句中的动态日期的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50829794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com