2011-02-16 56 views
0

不同的结果,我想从表中得到一个结果:分组从同一个表

Date Charges 

22/04/2010 1764 
22/04/2010 200 
22/04/2010 761 
22/04/2010 3985 
22/04/2010 473 
22/04/2010 677 
22/04/2010 1361 
22/04/2010 6232 
22/04/2010 4095 
23/04/2010 7224 
23/04/2010 1748 
23/04/2010 1355 
23/04/2010 2095 
23/04/2010 2063 
23/04/2010 2331 
23/04/2010 2331 
23/04/2010 4473 
23/04/2010 478 
23/04/2010 1901 
23/04/2010 1250 
23/04/2010 1743 
24/04/2010 1743 
24/04/2010 3923 
24/04/2010 1575 
24/04/2010 1859 
24/04/2010 2431 
24/04/2010 1208 
24/04/2010 158 
24/04/2010 3246 
24/04/2010 2898 
24/04/2010 1517 
24/04/2010 2368 
24/04/2010 961 
24/04/2010 4111 
24/04/2010 3066 
24/04/2010 740 
25/04/2010 2651 
25/04/2010 2693 
25/04/2010 4847 
25/04/2010 312 
25/04/2010 1247 
25/04/2010 5858 
25/04/2010 1040 
25/04/2010 941 
25/04/2010 942 
25/04/2010 1784 
25/04/2010 418 
25/04/2010 2248 
25/04/2010 1834 
25/04/2010 418 
25/04/2010 2263 
26/04/2010 2746 
26/04/2010 942 
26/04/2010 883 
26/04/2010 3339 
26/04/2010 3517 
26/04/2010 761 
26/04/2010 1738 
26/04/2010 1370 
26/04/2010 1501 
26/04/2010 1197 
26/04/2010 2452 
26/04/2010 209 
26/04/2010 1092 
26/04/2010 4316 
26/04/2010 1208 
26/04/2010 1213 
26/04/2010 2179 
26/04/2010 1213 
26/04/2010 1538 
26/04/2010 1939 
26/04/2010 956 
26/04/2010 10715 
26/04/2010 4321 
26/04/2010 956 
26/04/2010 2975 
26/04/2010 798 
26/04/2010 1738 

它显示了以下字段:

日期,> 2500,合计> 2500的计数,总数和1/4/2010之间总计到30/4/2010

i.e. 
22/4/2010, 3, 14312, 9, 19548 
23/4/2010, 2, 11697, 12, 28992 
24/4/2010, 5, 17244, 15, 31804 
25/4/2010, 4, 16049, 15, 29496 
26/4/2010, 7, 31929, 27, 57812 

...
...

非常感谢所有帮助!提前致谢。

+0

您正在使用哪些DBMS? – bluish 2011-02-16 08:52:32

+0

我使用MS SQL Server 2008 R2的 – 2011-02-16 08:56:05

+0

我管理只得到: 选择 \t日期部分(日,DateTimeActivity)如白昼, \t COUNT(*)AS Visits_RM25, \t SUM(收费)AS MM_Spending_RM25 \t FROM AccActivity WHERE \t收费> = 2500 AND DateTimeActivity> = '04/01/2010' AND DateTimeActivity <'04/30/2010' GROUP BY日期部分(日,DateTimeActivity) ORDER BY日期部分(日期,日期时间活动) – 2011-02-16 08:56:58

回答

2

基础是使用SUM和CASE,是这样的:

SELECT 
    DATEADD(day,DATEDIFF(day,'20010101',DateTimeActivity),'20010101') as Date, 
    SUM(CASE WHEN Charges > 2500 THEN 1 ELSE 0 END) as Count2500, 
    SUM(CASE WHEN Charges > 2500 THEN Charges END) as Sum2500, 
    COUNT(*) as CountTotal, 
    SUM(Charges) as SumTotal 
FROM 
    AccActivity 
WHERE 
    DateTimeActivity >= '20100401' and 
    DateTimeActivity < '20100501' 
GROUP BY 
    DATEADD(day,DATEDIFF(day,'20010101',DateTimeActivity),'20010101') 

更新根据您的意见,使用真正的表/列名。我假设你想包括4月30日发生的交易。

请注意,我为我的日期文字(YYYYMMDD)使用安全的日期格式 - 大多数其他格式基于服务器上的区域设置不明确。

而且,我使用DATEADD(day,DATEDIFF(day,'20010101',DateTimeActivity),'20010101')剥离从日期时间时间部分 - 它看起来略显质朴,但它是合理的速度快,和相同的模式可以用来比较容易做其他日期时间转换(例如,如果您需要上个组,你可以改变这两个day选项month,以及日期都将被设定各自本月1日起)

1

你可以尝试使用:

SELECT date, 
     count(if(charges>2500, 1, NULL)) as countGt2500, 
     sum(if(charges>2500, charges, 0)) as totalGt2500, 
     count(charges) as countTotal, 
     sum(charges) as sumTotal, 
    FROM yourTable 
WHERE date >= '2010/04/01' 
    AND date <= '2010/04/30' 
GROUP BY date; 

如果保存完整日期时间在现场日期,你必须从datet中提取日期部分ime,要做到这一点,您可以通过以下方式使用DATE功能:

SELECT DATE(date) as day, 
     count(if(charges>2500, 1, NULL)) as countGt2500, 
     sum(if(charges>2500, charges, 0)) as totalGt2500, 
     count(charges) as countTotal, 
     sum(charges) as sumTotal, 
    FROM yourTable 
WHERE date >= '2010/04/01' 
    AND date <= '2010/04/30' 
GROUP BY day;