我认为聚合和分组付费存根的生效日期是过去的:
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`
我在很多方面使用这种观点。我查询它的特定employee_ids集;我查询特定的年份和/或季度。我甚至有基于这种观点的子视图。
我希望能够做的是将日期传递给此视图以使用而不是CURDATE()。然后,我可以询问特定时间的汇总数据。这可以让我测试过去或未来的数据。但由于您无法将参数传递给MySQL中的视图,因此该视图与系统时间结合。
如何在MySQL视图的where子句中实现类似动态日期的操作?
如果我将它设为存储过程,我可以传递日期参数,但是我失去了视图的优点。
答案 0 :(得分:0)
最简单的方法,恕我直言,就是从视图中完全删除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()