Mysql 按日期数据的SQL查询

Mysql 按日期数据的SQL查询,mysql,Mysql,在这种情况下,我需要找到为特定日期定义的列的总和。请参阅下表: 在这方面,我需要找到日期方面的数字总和,即上表中的3月15日至6月15日。月份用数字表示,例如5月份用数字表示,以此类推 通过以下查询,我在每个任务的特定月份完成了该任务: select (d1+d2+d3+d4+d5+d6+d7+d8+d9+d10+d11+d12+d13+d14+d15+d16+d17+d18+d19+d20+d21+d22+d23+d24+d25+d26+d27+d28+d29+d30+d31) as Hour

在这种情况下,我需要找到为特定日期定义的列的总和。请参阅下表:

在这方面,我需要找到日期方面的数字总和,即上表中的3月15日至6月15日。月份用数字表示,例如5月份用数字表示,以此类推

通过以下查询,我在每个任务的特定月份完成了该任务:

select (d1+d2+d3+d4+d5+d6+d7+d8+d9+d10+d11+d12+d13+d14+d15+d16+d17+d18+d19+d20+d21+d22+d23+d24+d25+d26+d27+d28+d29+d30+d31) as HourSum from table1 where Month='<Given Month>';
我不想查询,但我的想法是只求列值加法的一半或更少。谢谢。

在d1和d2中试试这个

select sum(d1)+sum(d2) HourSum from table1 group by month,year
按组转介

最新答复:

我认为您的表结构非常奇怪,您应该只有一个列名称date而不是date 有31列的D1-d31

无论如何,现在考虑到相同的表结构和数据,如果要查询2014年3月15日至2014年6月15日的数据,则需要编写如下查询: -d1至d31合计

select sum(d1) +sum(d2) +sum(d3) +sum(d4) +sum(d5) +sum(d6) +sum(d7) +sum(d8)+sum(d9) +sum(d10) +sum(d11) +sum(d12) +sum(d13) +sum(d14) +sum(d15)+sum(d16) +sum(d17) +sum(d18) +sum(d19) +sum(d20)+sum(d21) +sum(d22) +sum(d23) +sum(d24) +sum(d25) +sum(d26) +sum(d27) +sum(d28) +sum(d29)+sum(d30) +sum(d31) as TotalHours   

from 
(
-- sum 15 march 2014 to 31 march 2014

select 0 as d1,0 as d2,0 as d3, 0 as d5, 0 as d6,0 as d7, 0 as d8,0 as d9,0 as d10,0 as 11,0 as 12,0 as d13,0 as d14,sum(d15) as d15,sum(d16) as d16,sum(d17) as d17,sum(d18) as d18,sum(d19) as d19,sum(d20) as d20,sum(d21) as d21,sum(d22) as d22,sum(d23) as d23,sum(d24) as d24,sum(d25) as d25,sum(d26) as d26,sum(d27) as d27,sum(d28) as d28,sum(d29) as d29,sum(d30) as d30,sum(d31) as d31  from table1 where month = 3 and year=2014  group by Month
)t1

 UNION ALL
(
-- sum 1 april 2014 to 31 may 2014

select sum(d1) as d1,sum(d2) as d2,sum(d3) as d3,sum(d4) as d4,sum(d5) as d5,sum(d6) as d6,sum(d7) as d7,sum(d8) as d8,sum(d9) as d9,sum(d10) as d10,sum(d11) as d11,sum(d12) as d12,sum(d13) as d13,sum(d14) as d14,sum(d15),sum(d15) as d15,sum(d16) as d16,sum(d17) as d17,sum(d18) as d18,sum(d19) as d19,sum(d20) as d20,sum(d21) as d21,sum(d22) as d22,sum(d23) as d23,sum(d24) as d24,sum(d25) as d25,sum(d26) as d26,sum(d27) as d27,sum(d28) as d28,sum(d29) as d29,sum(d30) as d30,sum(d31) as d31  from table1 where month in (4,5) and year=2014    group by Month
)t2
UNION ALL
(
-- sum 1 june 2014 to 15 june 2014

select sum(d1) as d1,sum(d2) as d2,sum(d3) as d3,sum(d4) as d4,sum(d5) as d5,sum(d6) as d6,sum(d7) as d7,sum(d8) as d8,sum(d9) as d9,sum(d10) as d10,sum(d11) as d11,sum(d12) as d12,sum(d13) as d13,sum(d14) as d14,sum(d15),sum(d15) as d15, 0 as d16,0 as d17, 0 as d18,0 as d19, 0 as d20, 0 as d21, 0 as d22,0 as d23,0 as d24,0 aS d25,0 AS d26,0 as d27,0 as d28,0 as d29,0 as 30,0 as 31 from table1 where month = 6 and year=2014 group by Month
)t3

同样,如果可能,请更改您的表结构。

谢谢您的回复。但是如何创建具有动态日期的查询呢。例如,如果是从5月15日到6月14日,那么5月的sumd15+sumd16+…SUMD31,但6月1日到14日的情况如何。这是最令人困惑的场景。@Moksh:1th到14th数据总和将显示在Jun month中。如果您想要任何特定月份的总和,则可以在where子句中添加month条件。@ZafarMalik:Yes。但我如何将所有这些放在一个查询中?如果我将where子句设置为MOUNT='5',则还可以计算5月1日至14日。我说的对吗?你的查询不清楚。我想你说的是6月1日到14日。如果你使用月=5,那么6月数据将不包括。如果你想说其他的话,请详细说明…@Moksh我已经更新了查询,请尝试一下,让我知道它是否有效