SQL按季度总结太阳能发电量



我有一个MySQL表,其中包含10年的太阳能电池板发电数据(每10分钟一次,其中发电量>为零)。

我不知道如何构造一个查询,该查询将为我每年行提供四个值,每个值代表当年每个季度的总和。

我的源表(DTP)模式如下:

#,  Field,      Type,           Null,   Key,    Default,    Extra
1,  'PWR',      'decimal(5,3)', 'NO',   '',     NULL,       ''
2,  'idDTP',    'int(11)',      'NO',   'PRI',  NULL,       'auto_increment'
3,  'DT',       'datetime',     'NO',   '',     NULL,       ''

我可能会给我指出一个正确的方向的例子是这样的(请记住,这在一定程度上是从来源修改的):

SELECT Year,SUM(Quarter1) AS Quarter1,SUM(Quarter2) AS Quarter2,SUM(Quarter3) AS Quarter3,SUM(Quarter4) AS Quarter4
FROM
(
SELECT YEAR(DT) AS 'Year' ,
Quarter1 = CASE(DATEPART(q, DTP.DT))
WHEN 1 THEN SUM(DTP.DT)
ELSE 0
END,
Quarter2 = CASE(DATEPART(q, DTP.DT))
WHEN 2 THEN SUM(DTP.DT)
ELSE 0
END,
Quarter3 = CASE(DATEPART(q, DTP.DT))
WHEN 3 THEN SUM(DTP.DT)
ELSE 0
END,
Quarter4 = CASE(DATEPART(q, DTP.DT))
WHEN 4 THEN SUM(DTP.DT)
ELSE 0
END
FROM DTP LEFT JOIN PWR ON DTP.DT = Customers.CustomerID
LEFT JOIN [Order Details] ON [Order Details].OrderID = Orders.OrderID
GROUP BY CompanyName, YEAR(OrderDate), DATEPART(q, OrderDate)
)C
GROUP BY CompanyName,Year

我开始尝试将其转换为我的场景,但在不理解它的情况下,我陷入了一个半成品(假设这是正确的)的混乱,我不知道如何解决它。任何解释良好的提示或链接都是受欢迎的-火焰,不那么受欢迎;oP

如果我选错了论坛,请礼貌地指出正确的论坛——在Stack Echange列表中找不到更好的选择。

谢谢来源数据第一年的小样本(2月-3月)

'160851', '2012-02-29 08:00:00', '0.030'
'160852', '2012-02-29 08:10:00', '0.066'
'160853', '2012-02-29 08:20:00', '0.072'
'160854', '2012-02-29 08:30:00', '0.060'
'160855', '2012-02-29 08:40:00', '0.090'
'160856', '2012-02-29 08:50:00', '0.102'
'160857', '2012-02-29 09:00:00', '0.084'
'160858', '2012-02-29 09:10:00', '0.132'
'160859', '2012-02-29 09:20:00', '0.144'
'160860', '2012-02-29 09:30:00', '0.138'
'160861', '2012-02-29 09:40:00', '0.150'
'160862', '2012-02-29 09:50:00', '0.174'
'160863', '2012-02-29 10:00:00', '0.174'
'160864', '2012-02-29 10:10:00', '0.162'

我无法输入一年的数据,因为它毫不奇怪地超过了允许的计数,但它也以类似的方式进行。

没有任何有意义的输出,因为我在接近任何可行的代码之前就已经超出了我的深度。

定义一个新的年度季度列,名为yq。用"2021-q4""2022-q1"等值填充它。

现在你的问题很简单。只计算SUM( ... )具有CCD_ 5。

您缺少一些表,但我将它们保留在子查询中。

subwquery将显示所有季度、每个公司和年份的数字。

外界的质疑会把它们总结成没有公司的年份。。

当你需要更多的列时,你可以从公司订单或订单详细信息中添加它们,并将它们添加到内部SELECT中,然后将它们也添加到外部,以按订单或此类对它们进行分组

SELECT Year,SUM(Quarter1) AS Quarter1,SUM(Quarter2) AS Quarter2,SUM(Quarter3) AS Quarter3,SUM(Quarter4) AS Quarter4
FROM
(
SELECT  CompanyName,YEAR(DT) AS 'Year' ,
SUM(CASE WHEN DATEPART(q, DTP.DT)  =  1 THEN DTP.PWR ELSe 0 END)  Quarter1,
SUM(CASE WHEN DATEPART(q, DTP.DT)  =  2 THEN DTP.PWR ELSe 0 END) Quarter2,
SUM(CASE WHEN DATEPART(q, DTP.DT)  =  3 THEN DTP.PWR ELSe 0 END)  Quarter3,
SUM(CASE WHEN DATEPART(q, DTP.DT)  =  4 THEN DTP.PWR ELSe 0 END) Quarter4
FROM DTP LEFT JOIN PWR ON DTP.DT = Customers.CustomerID
LEFT JOIN [Order Details] ON [Order Details].OrderID = Orders.OrderID
GROUP BY CompanyName, YEAR(OrderDate)
) C
GROUP BY Year

没有客户和订单

SELECT  CompanyName,YEAR(DT) AS 'Year' ,
SUM(CASE WHEN DATEPART(q, DTP.DT)  =  1 THEN DTP.PWR ELSe 0 END)  Quarter1,
SUM(CASE WHEN DATEPART(q, DTP.DT)  =  2 THEN DTP.PWR ELSe 0 END) Quarter2,
SUM(CASE WHEN DATEPART(q, DTP.DT)  =  3 THEN DTP.PWR ELSe 0 END)  Quarter3,
SUM(CASE WHEN DATEPART(q, DTP.DT)  =  4 THEN DTP.PWR ELSe 0 END) Quarter4
FROM DTP 
GROUP BY  YEAR(DT)

最新更新