SQL按年、月、日、小时、分钟的汇总

刚一上班就碰到个问题,要我把任意时间段的数据按 年、月、日、小时、分种任意格式来汇总,搞了半天终于写出来了,奉献给新手们看看还行吗

SELECT   CONVERT ( CHAR (10 ), [ OrderTime ] , 120 ) [ time ] ,USD,EUR,GBP,CAD,AUD,HKD
INTO  #F
FROM  Paypal
WHERE   DATEDIFF ( DAY ,OrderTime, @date ) = 0   AND  PaypalState = ' Completed '

这个查询是用来把指定那天的所有记录查询到临时表 #F中,最关键就是SELECT语句里面的Convert函数,你把CHAR的值设多长,比如说你想基于YYYY-MM月查询
就应该写成CHAR(7),为什么呢?因为当你把Datetime转化成字符串的过程中,CHAR(7)把后面多余的字符截取掉了,得到了你想要的日期格式。这样再GROUP BY
这个新生成的列,就是按月的汇总,按此推理YYYY-MM-DD就是CHAR(10),YYYY-MM-DD HH就是CHAR(13),YYYY-MM-DD HH:mi就是CHAR(16)

SELECT   [ time ] , ' USD ' = SUM (USD) * @USD , ' EUR ' = SUM (EUR) * @EUR , ' GBP ' = SUM (GBP) * @GBP , ' CAD ' = SUM (CAD) * @CAD , ' AUD ' = SUM (AUD) * @AUD , SUM (HKD) * @HKD [ HKD ] , ' Quantity ' = Count ( * ),
(
SUM (USD) * @USD + SUM (EUR) * @EUR + SUM (GBP) * @GBP + SUM (CAD) * @CD + SUM (AUD) * @AUD + SUM (HKD) * @HKD ) [ CNY ]
FROM  #F
GROUP   BY   [ time ]

DROP   TABLE  #F

你看我基于每天的每小时的汇总,就是这样实现的,假如你有更好的办法,赶快给我拍砖啊

你可能感兴趣的:(sql)