我拼命想要从几天的时间范围内获取值的总和,问题是范围重叠一天,例如从15:00到10:00但不幸的是我不能提出另一种解决方案而不是循环所有的日子,但确保有一个更优雅的方式来在一个查询中执行此操作。 一天我有这样的东西
SELECT
(Date(`Date`)) AS `Date`, SUM(`Val`), `Ld_id`
FROM
(SELECT
`Date`, SUM(`Val`) AS `Val`, `Ld_id`
FROM
`tblVals`
INNER JOIN (SELECT
*
FROM
`tblDate`
WHERE
`Date` BETWEEN (SELECT CONCAT('2011-08-26 ', '14:31:00'))
AND (SELECT CONCAT('2011-08-27 ', '10:01:00'))
ORDER BY `Date` ASC) AS `A` ON `tblVals`.`date_id` = `A`.`date_id`
WHERE
`Ld_id` BETWEEN (SELECT
MIN(`Ld_id`)
FROM
`tblLr`
WHERE
`s_id` = '1') AND (SELECT
MAX(`Ld_id`)
FROM
`tblLr`
WHERE
`s_id` = '1')
GROUP BY ((60/30)*HOUR(`Date`)+FLOOR(MINUTE(`Date`)/30)),`Ld_id`
ORDER BY `Ld_id` ASC ,`Date` ASC) AS `A`
Group by `Ld_id`
非常感谢任何提示
答案 0 :(得分:0)
如果你想要第二天15:00到14:59:
- 从所有时间戳中减去15小时
- 按时间戳的日期部分分组
如果你想要第二天的15:00到10:00:
- 从所有时间戳中减去15小时
- 丢弃时间段现在大于19:00的所有记录
- 按时间戳的日期部分分组
在MySQL中,我认为它是这样的......
SELECT
DATE(DATE_SUB('Date', INTERVAL 15 HOUR)),
SUM(VAL)
FROM
tblVals
WHERE
TIME(DATE_SUB('Date', INTERVAL 15 HOUR)) < '19:00'
GROUP BY
DATE(DATE_SUB('Date', INTERVAL 15 HOUR))