0

这是我的桌子,我能得到这个结果吗?每个用户都有积分,我必须显示当月,当年获得的用户积分数

谢谢。

--------------------------------
| userId | points | date       |
--------------------------------
| 1      | 5      | 8/25/2013  |
| 1      | 3      | 8/16/2013  |
| 1      | 2      | 8/01/2013  |
| 1      | 2      | 9/25/2013  |
| 1      | 5      | 8/25/2013  |
| 1      | 3      | 2/16/2012  |
| 2      | NULL   | NULL       |
| 2      | NULL   | NULL       |
--------------------------------

他们的结果应该是这样的:

---------------------------------------------------
| userId | CurrentMonthpoints | CurrentYearPoints |
---------------------------------------------------
| 1      | 15                 | 17                |
| 2      | NULL               | NULL              |
---------------------------------------------------

我的请求 :

SELECT  userId, 
        (SELECT   sum(points)
            from tbl_points
            WHERE  PointsDate between '8/1/2013' and '8/31/2013') AS CurrentMonthPoints,
        (SELECT distinct SUM(points)
             from tbl_points
             WHERE PointsDate between '1/1/2014' and '12/31/2014' ) AS CurrentYearPoints
 from tbl_user_performance_points

但我的查询错误地显示为:

---------------------------------------------------
| userId | CurrentMonthpoints | CurrentYearPoints |
---------------------------------------------------
| 1      | 15                 | 17                |
| 2      | 15                 | 17                |
---------------------------------------------------

提前谢谢

4

3 回答 3

1

试试这个:

select a.userID,
  a.points_sum_m as currentmonthpoints,
  b.points_sum_y as currentyearpoints
from (select userID, sum(points) as points_sum_m
   from tbl_points
   where month(date) = month(getdate())
   group by userID) a
inner join (select userID, sum(points) as points_sum_y
   from tbl_points
   where year(date) = year(getdate())
   group by userID) b
on a.userID = b.userID;

SQLFiddle:http ://sqlfiddle.com/#!3/ff780/12

于 2013-08-29T14:18:50.567 回答
0

如果您只想更正您的查询,请将其替换为...

SELECT  userId, 
        (SELECT   sum(points)
            from tbl_points
            WHERE  PointsDate between '8/1/2013' and '8/31/2013' and userId= X.UserId) AS CurrentMonthPoints,
        (SELECT distinct SUM(points)
             from tbl_points
             WHERE PointsDate between '1/1/2014' and '12/31/2014' and userId = X.UserId) AS CurrentYearPoints
 from tbl_user_performance_points X
于 2013-08-29T14:07:59.573 回答
0
  with month_cte(userid,Current_Month) as
  (select userid,sum(Points)Current_Month from tbl_points
  where datepart(mm,PointsDate)=datepart(mm,getdate()) and datepart(YY,PointsDate)=datepart(yy,getdate()) group by userid)

   , year_cte(userid,Current_year) as
  (select userid,sum(Points)Current_Year from tbl_points
  where datepart(YY,PointsDate)=datepart(yy,getdate()) group by userid)

  select Distinct t.Userid, Current_Month, Current_Year From tbl_points T 
  left join month_cte mc on T.userid=mc.userid
  left join year_cte yc on t.userid=yc.userid
于 2013-08-29T13:57:24.747 回答