Сумма за промежуток времени с перекрытием на следующий день за несколько дней - PullRequest
0 голосов
/ 11 октября 2011

Я отчаянно пытаюсь получить сумму значений из диапазона времени за несколько дней, проблема заключается в том, что диапазон перекрывается за день, например, с 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 голосов
/ 11 октября 2011

Если вы хотите с 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...