Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL每个日期的总金额_Mysql_Date_Sum - Fatal编程技术网

Mysql SQL每个日期的总金额

Mysql SQL每个日期的总金额,mysql,date,sum,Mysql,Date,Sum,我有一个名为rentals的表,其中存储的数据如下: id | rent_id | start_date | end_date | amount --------------------------------------------- 1 | 54 | 12-10-2019 | 26-10-2019| 100 2 | 54 | 13-10-2019 | 20-10-2019| 150 我期待什么?结果如下: 12-10-2019 , amount 100 from

我有一个名为rentals的表,其中存储的数据如下:

id | rent_id | start_date | end_date  | amount
---------------------------------------------
1  |   54    | 12-10-2019 | 26-10-2019| 100
2  |   54    | 13-10-2019 | 20-10-2019| 150
我期待什么?结果如下:

12-10-2019 , amount 100
from 13-10-2019 to 20-10-2019, amount 250
from 21-10-2019 to 26-10-2019, amount 100
基本上,我想要,每天的总金额。但我还想计算两人之间的天数

因此,预期结果将是:

    id | rent_id | day        |  amount
    ---------------------------------------------
    1  |   54    | 12-10-2019 | 100
    2  |   54    | 13-10-2019 | 250
    3  |   54    | 14-10-2019 | 250
等等

我实际上正在运行以下sql:

select start_date, ( select sum(amount) from rentals as t2 where t2.start_date <= t1.start_date) as amount from rentals as t1 WHERE rent_id = 54 group by start_date
但结果与预期不符

我正在使用MySQL

临时工作日是指从11日到27日的所有工作日

MySQL解决方案MySQL 8.0:

我想这可能会有帮助 使用MSSQL


这个问题的一个常见解决方案是首先创建一个日历表。这是一个存储查询需要处理的所有可能日期的表。在野外有一些解决方案可用于创建和填充表格,例如,您可以查看

因此,让我们假设一个具有以下结构和数据的表:

CREATE TABLE all_dates as (my_date DATE PRIMARY KEY);
INSERT INTO all_dates VALUES
    ('12-10-2019'),
    ('13-10-2019'),
    ('14-10-2019'),
    ...
;
现在,只需将表与日历表合并并汇总结果即可解决问题,如下所示:

SELECT r.rent_id, d.my_date `day`, SUM(amount) amount
FROM all_dates d
INNER JOIN rentals r ON d.my_date BETWEEN r.start_date AND r.end_date
GROUP BY r.rent_id, d.my_date
SELECT ROW_NUMBER() OVER(ORDER BY rent_id, `day`) id, x.*
FROM (
    SELECT r.rent_id, d.my_date `day`, SUM(amount) amount
    FROM all_dates d
    INNER JOIN rentals r ON d.my_date BETWEEN r.start_date AND r.end_date
    GROUP BY r.rent_id, d.my_date
) x
注意:您对结果id列的意图不清楚。您似乎愿意创建一个新的唯一id。如果愿意,一个选项是使用ROW_NUMBER,如下所示:

SELECT r.rent_id, d.my_date `day`, SUM(amount) amount
FROM all_dates d
INNER JOIN rentals r ON d.my_date BETWEEN r.start_date AND r.end_date
GROUP BY r.rent_id, d.my_date
SELECT ROW_NUMBER() OVER(ORDER BY rent_id, `day`) id, x.*
FROM (
    SELECT r.rent_id, d.my_date `day`, SUM(amount) amount
    FROM all_dates d
    INNER JOIN rentals r ON d.my_date BETWEEN r.start_date AND r.end_date
    GROUP BY r.rent_id, d.my_date
) x

我应该提到我运行MySQL,这是不兼容的…而且我不需要额外的时间使用0 amountAbove确实是MS-SQL的解决方案。MySQL的哪个版本,因为8+与如果我在db fiddle中选择MySQL有关,它会在调用本机函数“ISNULL”时抛出错误参数计数,而且我看到您手动选择1作为id,2作为id,但它可能有更多的ID…第1Ok行“declare@startDate date='2019年10月11日'declare@endDate='2019年10月30日'decl'附近的语法错误我需要提到的是我在使用MSSQL
SELECT ROW_NUMBER() OVER(ORDER BY rent_id, `day`) id, x.*
FROM (
    SELECT r.rent_id, d.my_date `day`, SUM(amount) amount
    FROM all_dates d
    INNER JOIN rentals r ON d.my_date BETWEEN r.start_date AND r.end_date
    GROUP BY r.rent_id, d.my_date
) x