diff --git a/SolarPower/Repository/Implement/StationReportRepository.cs b/SolarPower/Repository/Implement/StationReportRepository.cs index 08722e7..7fb1e31 100644 --- a/SolarPower/Repository/Implement/StationReportRepository.cs +++ b/SolarPower/Repository/Implement/StationReportRepository.cs @@ -51,19 +51,36 @@ namespace SolarPower.Repository.Implement conn.Open(); try { - string sql = "SET SESSION group_concat_max_len = 102400;"; - sql += @$" - SET @sql = NULL; - SELECT GROUP_CONCAT( 'a.inv_',RIGHT(v.InverterId, 2)) - from v_company_inv v + //string sql = @$"SET SESSION group_concat_max_len = 102400; + // SELECT GROUP_CONCAT( 'a.inv_',RIGHT(v.InverterId, 2)) + // from inv_status v + // LEFT JOIN power_station p ON p.Code = left(inverterid, 9) + // WHERE p.Id = {post.PowerStation} AND v.enabled = 1 + // order by 1"; + string sql = @$" SELECT RIGHT(v.InverterId, 2) inv + from inv_status v LEFT JOIN power_station p ON p.Code = left(inverterid, 9) - WHERE p.Id = {post.PowerStation} AND v.enabled = 1 ;"; - var inv = conn.Query(sql).FirstOrDefault(); + WHERE p.Id = {post.PowerStation} AND v.enabled = 1 + order by 1"; + var invList = conn.Query(sql).ToList(); + string inv = string.Empty; + foreach (var s in invList) + { + inv += "round(sum( inv_" + s + ") , 2) inv_" + s + " , "; + } + // sum(inv_01) as inv_01 - sql = $@" select GROUP_CONCAT( ' round(sum(inv_',RIGHT(v.InverterId, 2), '), 3) inv_',RIGHT(v.InverterId, 2) ) - from inv_status v LEFT JOIN power_station p ON p.Code = left(inverterid, 9) - WHERE p.Id = {post.PowerStation} and v.enabled = 1;"; - var inv_sum = conn.Query(sql).FirstOrDefault(); + //var inv_ss = inv.Split(',').Select(x => " round(sum(" + x + "), 2) " + x.Substring(2, x.Length -2) + ", ").ToList(); + //string inv_sum = string.Empty; + //foreach (string s in inv_ss) + //{ + // inv_sum += s; + //} + //sql = $@" select GROUP_CONCAT( ' round(sum(inv_',RIGHT(v.InverterId, 2), '), 3) inv_',RIGHT(v.InverterId, 2) ) + // from inv_status v LEFT JOIN power_station p ON p.Code = left(inverterid, 9) + // WHERE p.Id = {post.PowerStation} and v.enabled = 1 + // order by 1;"; + //var inv_sum = conn.Query(sql).FirstOrDefault(); switch (post.FormType) { @@ -71,7 +88,7 @@ namespace SolarPower.Repository.Implement sql = $@" DROP TABLE IF EXISTS temp_inv; create TEMPORARY TABLE temp_inv as - SELECT DATE_FORMAT(a.report_date,'%m-%d %H') report_date, {inv}, + SELECT DATE_FORMAT(a.report_date,'%m-%d %H') report_date, {inv} a.hourKWH hourKWH, a.hourKWHp 'hourKWHp', a.irradiance 'irradiance', a.Temperature 'temperature', a.hourmoney 'hourmoney', c.TODAYKWH 'totKWH', c.KWHKWP 'totKWHKWP', c.money 'totmoney', stationName, powerRate daymoney, c.SOLARHOUR tothour,round(a.PR, 2) as pr,GeneratingCapacity FROM report_invday a @@ -96,7 +113,7 @@ namespace SolarPower.Repository.Implement -- step 3 select * from temp_inv union - SELECT '總計' report_date, {inv_sum}, + SELECT '總計' report_date, {inv} round(sum(hourKWH), 2) hourKWH, round(sum(hourKWHp), 2) hourKWHp, round(sum(irradiance), 2) irradiance, avg(temperature) temperature, round(sum(hourmoney), 2) hourmoney, avg(totKWH) totKWH, avg(totKWHKWP) totKWHKWP, avg(totmoney) totmoney, '電站名稱' stationName, avg(daymoney) daymoney, avg(tothour) tothour, avg(pr) pr, avg(GeneratingCapacity) GeneratingCapacity @@ -106,71 +123,115 @@ namespace SolarPower.Repository.Implement case 1: //月報 if(post.SearchType == 2) { - sql += @$" - SET @sql = NULL; - SELECT - GROUP_CONCAT(DISTINCT - CONCAT('max(case when INVERTERID = ''', INVERTERID, ''' then round(a.KWH, 2) end) ''inv_', right(INVERTERID, 2), '''') - ) INTO @sql - FROM inverter_history_day where powerstationId = {post.PowerStation} and DATE_FORMAT(`TIMESTAMP`,'%Y-%m') = '{post.Time}'; - SET @sql = CONCAT('SELECT DATE_FORMAT(a.TIMESTAMP,''%m/%d'') report_date, ', @sql, - ',b.TODAYKWH ''dayKWH'', round((b.TODAYKWH / c.monthKWH)*100,2) ''dayKWHp'', b.SOLARHOUR ''tothour'', b.KWHKWP ''KWHKWP'', b.PR,z.GeneratingCapacity, - d.irradiance ''irradiance'', d.Temperature ''temperature'', b.money ''soldmoney'', - c.monthKWH ''monthKWH'', c.money ''monthmoney'', stationName, powerRate ''monthmoneyone'',SolarType,SiteDB,d.IrrDay - FROM inverter_history_day a left join + sql= @$" DROP TABLE IF EXISTS temp_inv; + create TEMPORARY TABLE temp_inv as + SELECT DATE_FORMAT(a.report_date,'%m/%d') report_date, {inv} + b.TODAYKWH 'dayKWH', round((b.TODAYKWH / c.monthKWH)*100,2) 'dayKWHp', b.SOLARHOUR 'tothour', b.KWHKWP 'KWHKWP', b.PR,z.GeneratingCapacity, + d.irradiance 'irradiance', d.Temperature 'temperature', b.money 'soldmoney', + c.monthKWH 'monthKWH', c.money 'monthmoney', stationName, powerRate 'monthmoneyone',SolarType,SiteDB,d.IrrDay + FROM report_invday a left join ( # 每日加總 inv - select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') report_date, siteid, sitetype, #, round(KWH, 2) KWH, + select powerStationid, DATE_FORMAT(TIMESTAMP,'%Y-%m-%d') report_date, siteid, sitetype, #, round(KWH, 2) KWH, round(todayKWH, 2) todayKWH,round(KWHKWP, 2) KWHKWP, round(PR, 2) PR, ifnull(round(money, 2),0) money, round(SOLARHOUR, 2) SOLARHOUR from power_station_history_day - where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m'') = ''{post.Time}'' - ) b on a.powerStationid = b.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') = b.report_date + where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,'%Y-%m') = '{post.Time}' + ) b on a.powerStationid = b.powerStationid and DATE_FORMAT(a.report_date,'%Y-%m-%d') = b.report_date left join ( # month - select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y-%m'') report_date, sitetype, round(monthKWH, 2) monthKWH,round(KWHKWP, 2) KWHKWP + select powerStationid, DATE_FORMAT(TIMESTAMP,'%Y-%m') report_date, sitetype, round(monthKWH, 2) monthKWH,round(KWHKWP, 2) KWHKWP , round(PR, 2) PR, round(money, 2) money , round(SOLARHOUR, 2) SOLARHOUR from power_station_history_month - where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m'') = ''{post.Time}'' - ) c on a.powerStationid = c.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') = c.report_date + where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,'%Y-%m') = '{post.Time}' + ) c on a.powerStationid = c.powerStationid and DATE_FORMAT(a.report_date,'%Y-%m') = c.report_date left join ( - select powerStationID, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'')report_date, irradiance, Temperature ,IrrDay + select powerStationID, DATE_FORMAT(TIMESTAMP,'%Y-%m-%d')report_date, irradiance, Temperature ,IrrDay from sensor_history_day - where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m'') = ''{post.Time}'' - ) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') = d.report_date + where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,'%Y-%m') = '{post.Time}' + ) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.report_date,'%Y-%m-%d') = d.report_date join ( select id, name stationName, powerRate,SolarType,SiteDB,GeneratingCapacity from power_station where id = {post.PowerStation} )z on a.powerstationid = z.id - where DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') = ''{post.Time}'' - GROUP BY DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') - order by DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') '); - - # select @sql as 'mySelect'; #顯示動態語法 - PREPARE stmt FROM @sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt;"; + where a.PowerStationID ={post.PowerStation} and DATE_FORMAT(a.report_date,'%Y-%m') = '{post.Time}' + GROUP BY DATE_FORMAT(a.report_date,'%Y-%m-%d') + order by DATE_FORMAT(a.report_date,'%Y-%m-%d') ; + -- step 2 + DROP TABLE IF EXISTS temp_inv2; + create TEMPORARY TABLE temp_inv2 as + select * from temp_inv; + -- step 3 + select * from temp_inv + union + SELECT '總計' report_date, {inv} + round(sum(dayKWH), 2) dayKWH, round(sum(dayKWHp), 2) dayKWHp, round(max(tothour), 2) tothour, avg(KWHKWP) KWHKWP, round(avg(PR), 2) PR, + GeneratingCapacity, round(sum(irradiance), 2) irradiance, avg(temperature) temperature, round(sum(soldmoney), 2) soldmoney, + monthKWH, monthmoney, stationName, monthmoneyone, SolarType, SiteDB, IrrDay + from temp_inv2 a; "; } else { //區間 var times = post.Time.Replace('-', 'a').Replace('/', '-').Replace(" ", "").Split('a'); + #region old sql + //sql = @$"SET @sql = NULL; + // SELECT + // GROUP_CONCAT(DISTINCT + // CONCAT('max(case when INVERTERID = ''', INVERTERID, ''' then round(a.KWH, 2) end) ''inv_', right(INVERTERID, 2), '''') + // ) INTO @sql + // FROM inverter_history_day where powerstationId = {post.PowerStation} and DATE_FORMAT(`TIMESTAMP`,'%Y-%m-%d') BETWEEN '{times[0]}' AND '{times[1]}'; + //SET @sql = CONCAT('SELECT DATE_FORMAT(a.TIMESTAMP,''%m/%d'') report_date, ', @sql, + // ',b.TODAYKWH ''dayKWH'', round((b.TODAYKWH / c.monthKWH)*100,2) ''dayKWHp'', b.SOLARHOUR ''tothour'', b.KWHKWP ''KWHKWP'', b.PR,GeneratingCapacity, + // d.irradiance ''irradiance'', d.Temperature ''temperature'', b.money ''soldmoney'', + // c.monthKWH ''monthKWH'', c.money ''monthmoney'', stationName, powerRate ''monthmoneyone'',SolarType,SiteDB ,d.IrrDay + // FROM inverter_history_day a left join + // ( # 每日加總 inv + // select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') report_date, siteid, sitetype, #, round(KWH, 2) KWH, + // round(todayKWH, 2) todayKWH,round(KWHKWP, 2) KWHKWP, round(PR, 2) PR, ifnull(round(money, 2),0) money, round(SOLARHOUR, 2) SOLARHOUR + // from power_station_history_day + // where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') BETWEEN ''{times[0]}'' AND ''{times[1]}'' + // ) b on a.powerStationid = b.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') = b.report_date + // left join + // ( # month + // SELECT powerStationid, ROUND(SUM(TODAYKWH),2) AS monthKWH, + // ROUND(AVG(KWHKWP),2) AS KWHKWP, + // ROUND(AVG(PR),2) AS PR, + // ROUND(SUM(MONEY),2) AS money, + // ROUND(SUM(SOLARHOUR),2) AS SOLARHOUR + // FROM power_station_history_day where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') BETWEEN ''{times[0]}'' AND ''{times[1]}'' + // ) c on a.powerStationid = c.powerStationid + // left join + // ( + // select powerStationID, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'')report_date, irradiance, Temperature ,IrrDay + // from sensor_history_day + // where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') BETWEEN ''{times[0]}'' AND ''{times[1]}'' + // ) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') = d.report_date + // join + // ( + // select id, name stationName, powerRate, SolarType, SiteDB,GeneratingCapacity from power_station where id = {post.PowerStation} + // )z on a.powerstationid = z.id + // where DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') BETWEEN ''{times[0]}'' AND ''{times[1]}'' + // GROUP BY DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') + // order by DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') '); - sql += @$"SET @sql = NULL; - SELECT - GROUP_CONCAT(DISTINCT - CONCAT('max(case when INVERTERID = ''', INVERTERID, ''' then round(a.KWH, 2) end) ''inv_', right(INVERTERID, 2), '''') - ) INTO @sql - FROM inverter_history_day where powerstationId = {post.PowerStation} and DATE_FORMAT(`TIMESTAMP`,'%Y-%m-%d') BETWEEN '{times[0]}' AND '{times[1]}'; - SET @sql = CONCAT('SELECT DATE_FORMAT(a.TIMESTAMP,''%m/%d'') report_date, ', @sql, - ',b.TODAYKWH ''dayKWH'', round((b.TODAYKWH / c.monthKWH)*100,2) ''dayKWHp'', b.SOLARHOUR ''tothour'', b.KWHKWP ''KWHKWP'', b.PR,GeneratingCapacity, - d.irradiance ''irradiance'', d.Temperature ''temperature'', b.money ''soldmoney'', - c.monthKWH ''monthKWH'', c.money ''monthmoney'', stationName, powerRate ''monthmoneyone'',SolarType,SiteDB ,d.IrrDay - FROM inverter_history_day a left join + // # select @sql as 'mySelect'; #顯示動態語法 + // PREPARE stmt FROM @sql; + // EXECUTE stmt; + // DEALLOCATE PREPARE stmt;"; + #endregion old sql + + sql = @$" DROP TABLE IF EXISTS temp_inv; + create TEMPORARY TABLE temp_inv as + SELECT DATE_FORMAT(a.report_date,'%m/%d') report_date, {inv} + b.TODAYKWH 'dayKWH', round((b.TODAYKWH / c.monthKWH)*100,2) 'dayKWHp', b.SOLARHOUR 'tothour', b.KWHKWP 'KWHKWP', b.PR,GeneratingCapacity, + d.irradiance 'irradiance', d.Temperature 'temperature', b.money 'soldmoney', + c.monthKWH 'monthKWH', c.money 'monthmoney', stationName, powerRate 'monthmoneyone',SolarType,SiteDB ,d.IrrDay + FROM report_invday a left join ( # 每日加總 inv - select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') report_date, siteid, sitetype, #, round(KWH, 2) KWH, + select powerStationid, DATE_FORMAT(TIMESTAMP,'%Y-%m-%d') report_date, siteid, sitetype, #, round(KWH, 2) KWH, round(todayKWH, 2) todayKWH,round(KWHKWP, 2) KWHKWP, round(PR, 2) PR, ifnull(round(money, 2),0) money, round(SOLARHOUR, 2) SOLARHOUR from power_station_history_day - where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') BETWEEN ''{times[0]}'' AND ''{times[1]}'' - ) b on a.powerStationid = b.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') = b.report_date + where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,'%Y-%m-%d') BETWEEN '{times[0]}' AND '{times[1]}' + ) b on a.powerStationid = b.powerStationid and DATE_FORMAT(a.report_date,'%Y-%m-%d') = b.report_date left join ( # month SELECT powerStationid, ROUND(SUM(TODAYKWH),2) AS monthKWH, @@ -178,73 +239,127 @@ namespace SolarPower.Repository.Implement ROUND(AVG(PR),2) AS PR, ROUND(SUM(MONEY),2) AS money, ROUND(SUM(SOLARHOUR),2) AS SOLARHOUR - FROM power_station_history_day where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') BETWEEN ''{times[0]}'' AND ''{times[1]}'' + FROM power_station_history_day where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,'%Y-%m-%d') BETWEEN '{times[0]}' AND '{times[1]}' ) c on a.powerStationid = c.powerStationid left join ( - select powerStationID, DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'')report_date, irradiance, Temperature ,IrrDay + select powerStationID, DATE_FORMAT(TIMESTAMP,'%Y-%m-%d')report_date, irradiance, Temperature ,IrrDay from sensor_history_day - where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') BETWEEN ''{times[0]}'' AND ''{times[1]}'' - ) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') = d.report_date + where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,'%Y-%m-%d') BETWEEN '{times[0]}' AND '{times[1]}' + ) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.report_date,'%Y-%m-%d') = d.report_date join ( select id, name stationName, powerRate, SolarType, SiteDB,GeneratingCapacity from power_station where id = {post.PowerStation} )z on a.powerstationid = z.id - where DATE_FORMAT(TIMESTAMP,''%Y-%m-%d'') BETWEEN ''{times[0]}'' AND ''{times[1]}'' - GROUP BY DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') - order by DATE_FORMAT(a.TIMESTAMP,''%Y-%m-%d'') '); - - # select @sql as 'mySelect'; #顯示動態語法 - PREPARE stmt FROM @sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt;"; + where a.powerstationId = {post.PowerStation} and DATE_FORMAT(a.report_date,'%Y-%m-%d') BETWEEN '{times[0]}' AND '{times[1]}' + GROUP BY DATE_FORMAT(a.report_date,'%Y-%m-%d') + order by DATE_FORMAT(a.report_date,'%Y-%m-%d'); + -- step 2 + DROP TABLE IF EXISTS temp_inv2; + create TEMPORARY TABLE temp_inv2 as + select * from temp_inv; + -- step 3 + select * from temp_inv + union + SELECT '總計' report_date, {inv} + round(sum(dayKWH), 2) dayKWH, round(sum(dayKWHp), 2) dayKWHp, round(max(tothour), 2) tothour, avg(KWHKWP) KWHKWP, round(avg(PR), 2) PR, + GeneratingCapacity, round(sum(irradiance), 2) irradiance, avg(temperature) temperature, round(sum(soldmoney), 2) soldmoney, + monthKWH, monthmoney, stationName, monthmoneyone, SolarType, SiteDB, IrrDay + from temp_inv2 a; "; } break; case 3: //年報 - sql += @$" - SET @sql = NULL; - SELECT - GROUP_CONCAT(DISTINCT - CONCAT('max(case when INVERTERID = ''', INVERTERID, ''' then round(a.KWH, 2) end) ''inv_', right(INVERTERID, 2), '''') - ) INTO @sql - FROM inverter_history_month where powerstationId = {post.PowerStation} and DATE_FORMAT(`TIMESTAMP`,'%Y') = '{post.Time}'; - SET @sql = CONCAT('SELECT DATE_FORMAT(a.TIMESTAMP,''%Y/%m'') report_date, ', @sql, - ',b.todayKWH ''dayKWH'', round((b.todayKWH / c.monthKWH)*100,2) ''dayKWHp'', b.SOLARHOUR ''tothour'', b.KWHKWP ''KWHKWP'', b.PR,z.GeneratingCapacity, - d.irradiance ''irradiance'', d.Temperature ''temperature'', b.money ''soldmoney'', - c.monthKWH ''monthKWH'', c.money ''monthmoney'', stationName, powerRate ''monthmoneyone'',SolarType,SiteDB - FROM inverter_history_month a left join + #region old SQL + //sql = @$" + // SET @sql = NULL; + // SELECT + // GROUP_CONCAT(DISTINCT + // CONCAT('max(case when INVERTERID = ''', INVERTERID, ''' then round(a.KWH, 2) end) ''inv_', right(INVERTERID, 2), '''') + // ) INTO @sql + // FROM inverter_history_month where powerstationId = {post.PowerStation} and DATE_FORMAT(`TIMESTAMP`,'%Y') = '{post.Time}'; + // SET @sql = CONCAT('SELECT DATE_FORMAT(a.TIMESTAMP,''%Y/%m'') report_date, ', @sql, + // ',b.todayKWH ''dayKWH'', round((b.todayKWH / c.monthKWH)*100,2) ''dayKWHp'', b.SOLARHOUR ''tothour'', b.KWHKWP ''KWHKWP'', b.PR,z.GeneratingCapacity, + // d.irradiance ''irradiance'', d.Temperature ''temperature'', b.money ''soldmoney'', + // c.monthKWH ''monthKWH'', c.money ''monthmoney'', stationName, powerRate ''monthmoneyone'',SolarType,SiteDB + // FROM inverter_history_month a left join + // ( # 每日加總 inv + // select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y-%m'') report_date, siteid, sitetype, + // round(MONTHKWH, 2) todayKWH,round(KWHKWP, 2) KWHKWP, round(PR, 2) PR, ifnull(round(money, 2),0) money, round(SOLARHOUR, 2) SOLARHOUR + // from power_station_history_month + // where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y'') = ''{post.Time}'' + // ) b on a.powerStationid = b.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') = b.report_date + // left join + // ( # month + // select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y'') report_date, sitetype, sum(round(monthKWH, 2)) monthKWH , avg(round(KWHKWP, 2)) KWHKWP + // , avg(round(PR, 2)) PR, sum(round(money, 2)) money , sum(round(SOLARHOUR, 2)) SOLARHOUR + // from power_station_history_month + // where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y'') = ''{post.Time}'' group by DATE_FORMAT(TIMESTAMP,''%Y'') + // ) c on a.powerStationid = c.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y'') = c.report_date + // left join + // ( + // select powerStationID, DATE_FORMAT(TIMESTAMP,''%Y-%m'')report_date, irradiance, Temperature + // from sensor_history_month + // where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y'') = ''{post.Time}'' + // ) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') = d.report_date + // join + // ( + // select id, name stationName, powerRate,SolarType,SiteDB,GeneratingCapacity from power_station where id = {post.PowerStation} + // )z on a.powerstationid = z.id + // where DATE_FORMAT(a.TIMESTAMP,''%Y'') = ''{post.Time}'' + // GROUP BY DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') + // order by DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') '); + + // # select @sql as 'mySelect'; #顯示動態語法 + // PREPARE stmt FROM @sql; + // EXECUTE stmt; + // DEALLOCATE PREPARE stmt;"; + #endregion + sql = @$" DROP TABLE IF EXISTS temp_inv; + create TEMPORARY TABLE temp_inv as + SELECT DATE_FORMAT(a.report_date,'%Y/%m') report_date, {inv} + b.todayKWH 'dayKWH', round((b.todayKWH / c.monthKWH)*100,2) 'dayKWHp', b.SOLARHOUR 'tothour', b.KWHKWP 'KWHKWP', b.PR,z.GeneratingCapacity, + d.irradiance 'irradiance', d.Temperature 'temperature', b.money 'soldmoney', + c.monthKWH 'monthKWH', c.money 'monthmoney', stationName, powerRate 'monthmoneyone',SolarType,SiteDB, IrrDay + FROM report_invday a left join ( # 每日加總 inv - select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y-%m'') report_date, siteid, sitetype, + select powerStationid, DATE_FORMAT(TIMESTAMP,'%Y-%m') report_date, siteid, sitetype, round(MONTHKWH, 2) todayKWH,round(KWHKWP, 2) KWHKWP, round(PR, 2) PR, ifnull(round(money, 2),0) money, round(SOLARHOUR, 2) SOLARHOUR from power_station_history_month - where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y'') = ''{post.Time}'' - ) b on a.powerStationid = b.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') = b.report_date + where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,'%Y') = '{post.Time}' + ) b on a.powerStationid = b.powerStationid and DATE_FORMAT(a.report_date,'%Y-%m') = b.report_date left join ( # month - select powerStationid, DATE_FORMAT(TIMESTAMP,''%Y'') report_date, sitetype, sum(round(monthKWH, 2)) monthKWH , avg(round(KWHKWP, 2)) KWHKWP + select powerStationid, DATE_FORMAT(TIMESTAMP,'%Y') report_date, sitetype, sum(round(monthKWH, 2)) monthKWH , avg(round(KWHKWP, 2)) KWHKWP , avg(round(PR, 2)) PR, sum(round(money, 2)) money , sum(round(SOLARHOUR, 2)) SOLARHOUR from power_station_history_month - where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y'') = ''{post.Time}'' group by DATE_FORMAT(TIMESTAMP,''%Y'') - ) c on a.powerStationid = c.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y'') = c.report_date + where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,'%Y') = '{post.Time}' group by DATE_FORMAT(TIMESTAMP,'%Y') + ) c on a.powerStationid = c.powerStationid and DATE_FORMAT(a.report_date,'%Y') = c.report_date left join ( - select powerStationID, DATE_FORMAT(TIMESTAMP,''%Y-%m'')report_date, irradiance, Temperature + select powerStationID, DATE_FORMAT(TIMESTAMP,'%Y-%m')report_date, irradiance, Temperature, IrrDay from sensor_history_month - where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,''%Y'') = ''{post.Time}'' - ) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') = d.report_date + where powerstationid = {post.PowerStation} and DATE_FORMAT(TIMESTAMP,'%Y') = '{post.Time}' + ) d on a.powerStationid = d.powerStationid and DATE_FORMAT(a.report_date,'%Y-%m') = d.report_date join ( select id, name stationName, powerRate,SolarType,SiteDB,GeneratingCapacity from power_station where id = {post.PowerStation} )z on a.powerstationid = z.id - where DATE_FORMAT(a.TIMESTAMP,''%Y'') = ''{post.Time}'' - GROUP BY DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') - order by DATE_FORMAT(a.TIMESTAMP,''%Y-%m'') '); - - # select @sql as 'mySelect'; #顯示動態語法 - PREPARE stmt FROM @sql; - EXECUTE stmt; - DEALLOCATE PREPARE stmt;"; + where a.powerstationId = {post.PowerStation} and DATE_FORMAT(a.report_date,'%Y') = '{post.Time}' + GROUP BY DATE_FORMAT(a.report_date,'%Y-%m') + order by DATE_FORMAT(a.report_date,'%Y-%m') ; + -- step 2 + DROP TABLE IF EXISTS temp_inv2; + create TEMPORARY TABLE temp_inv2 as + select * from temp_inv; + -- step 3 + select * from temp_inv + union + SELECT '總計' report_date, {inv} + round(sum(dayKWH), 2) dayKWH, round(sum(dayKWHp), 2) dayKWHp, round(max(tothour), 2) tothour, avg(KWHKWP) KWHKWP, round(avg(PR), 2) PR, + GeneratingCapacity, round(sum(irradiance), 2) irradiance, avg(temperature) temperature, round(sum(soldmoney), 2) soldmoney, + monthKWH, monthmoney, stationName, monthmoneyone, SolarType, SiteDB, IrrDay + from temp_inv2 a; "; break; }