时间范围内的总和在几天内重叠到第二天

时间:2011-10-11 09:51:50

标签: mysql sql database

我拼命想要从几天的时间范围内获取值的总和,问题是范围重叠一天,例如从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`

非常感谢任何提示

1 个答案:

答案 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))