select c.jieri,count(0) from (select a.* ,'春节' as jieri from tablea a where a.time> to_date('2015-10-01 00:00:00','YYYY-MM-DD hh24:mi:ss') and a.time< to_date('2015-10-02 00:00:00','YYYY-MM-DD hh24:mi:ss') union
select b.* ,'五一' as jieri from tablea a where b.time> to_date('2015-05-01 00:00:00','YYYY-MM-DD hh24:mi:ss') and b.time< to_date('2015-05-02 00:00:00','YYYY-MM-DD hh24:mi:ss')
) c group by c.jieri
感谢回答!
这样写怕是不合适。因为我要把连续几年节日的数据都取出来,时间判断上写死的话那就每年都要写好几个判断,整个sql太长。
@神跳跳: 这样写最工整,以后最容易修改,用空间换可维护性是值得的。或者你用:
SELECT B.JIERI,COUNT(0) FROM (SELECT CASE WHEN (a.time> to_date('2015-10-01 00:00:00','YYYY-MM-DD hh24:mi:ss') and a.time< to_date('2015-10-02 00:00:00','YYYY-MM-DD hh24:mi:ss')) THEN '国庆' WHEN (a.time> to_date('2015-05-01 00:00:00','YYYY-MM-DD hh24:mi:ss') and a.time< to_date('2015-05-02 00:00:00','YYYY-MM-DD hh24:mi:ss')) THEN '国庆 ELSE NULL END AS JIERI FROM TABLEA A
) B GROUP BY B.JIERI
但是,这样的SQL维护起来太有问题了,一旦改错了,别人节日也查不到了。
像我这样连除夕都能过错的人,针对这种问题最好的办法就是把他们全部记到db中,又没几个,五一国庆就不用说了,剩下的就算记100年的又能有几条记录?
另一种方式用网上那种给人感觉像阴阳八卦样的算每年的每个阴历节日翻译下估计也能凑合着用。
感谢回答!数据库表是这样的:
2011--2015年每年每天的数据都有,数据格式为“2015-10-01 00:00:00”、“2015-10-02 00:00:00”,根据这些日期过滤出每年的“春节”、“清明”、“五一”、“国庆”的数据,具体的sql语句该怎么写?
@神跳跳: 说了啊,额外建一张表,记录阴历的这些节日,这样就不用算了,只用join就可以完成了。