简体   繁体   中英

Select data group by weekly in MSSQL with sql server 2008

I used the following query with sql server 2008 to select data group by weekly.

SET DATEFIRST 1;
SELECT  userid,
Sum(ISNULL(ljoin,0)) AS ljoin,
Sum(ISNULL(rjoin,0)) AS rjoin, DATEPART(wk, Date) AS WeekNumber,
CASE 
WHEN YEAR(DATEADD(DAY, 1-DATEPART(WEEKDAY, Min([date])), Min([date]))) < YEAR(Min([date]))
THEN
CAST(DATEADD(YEAR, DATEDIFF(YEAR, 0,DATEADD(YEAR, 0 ,GETDATE())), 0) AS Varchar(50))  
+ ' TO ' + Cast(DATEADD(dd, 7-(DATEPART(dw, Min([date]))), Min([date]))  AS Varchar(50))
ELSE
Cast(DATEADD(DAY, 1-DATEPART(WEEKDAY, Min([date])), Min([date])) AS Varchar(50)) 
+ ' TO ' +     Cast(DATEADD(dd, 7-(DATEPART(dw, Min([date]))), Min([date]))  AS Varchar(50))
END AS  DateRange
FROM Pairs_Details  where  userid='jitu'
Group By userid,DATEPART(wk, Date)

but it return following result 

userid  ljoin   rjoin   WeekNumber  DateRange

jitu    0   2   1   Jan  1 2014 12:00AM TO Jan  5 2014 12:00AM
jitu    1   1   2   Jan  6 2014 12:00AM TO Jan 12 2014 12:00AM
jitu    1   0   3   Jan 13 2014 12:00AM TO Jan 19 2014 12:00AM
jitu    2   0   5   Jan 27 2014 10:00PM TO Feb  2 2014 10:00PM

and whant query which return following result

userid  ljoin   rjoin   WeekNumber  DateRange                              pair

jitu    0   2   1   Jan  1 2014 12:00AM TO Jan  5 2014 12:00AM       0
jitu    1   1   2   Jan  6 2014 12:00AM TO Jan 12 2014 12:00AM       1
jitu    1   0   3   Jan 13 2014 12:00AM TO Jan 19 2014 12:00AM       0
jitu    2   0   5   Jan 27 2014 10:00PM TO Feb  2 2014 10:00PM       0

this can be done using the following query and above query

Select Case When ljoin <= rjoin  Then ljoin Else rjoin End As pair from Pairs_Details 

but i don't no how we can combine the both query please any one can tell us or suggest us so that we can get my desired result. there are my following table structure and data.

  CREATE TABLE [dbo].[Pairs_Details](
  [sno] [int] IDENTITY(1,1) NOT NULL,
  [userid] [nvarchar](50) NULL,
  [date] [datetime] NULL,
  [ljoin] [int] NULL,
  [rjoin] [int] NULL
  ) ON [PRIMARY] 


  sno   userid              date                            ljoin rjoin
   1    jitu                2013-01-01 00:00:00.000         1   NULL
   2    jitu                2014-01-02 00:00:00.000           NULL    1
   3    tetu1234          2014-01-03 00:00:00.000           1   NULL
   4    jitu                2014-01-04 00:00:00.000             NULL    1
   5    saurbh123           2014-01-05 00:00:00.000     1   NULL
   6    jitu                2014-01-06 00:00:00.000         1   NULL
   9    saurbh123           2014-01-12 00:00:00.000         NULL    1
  10    jitu                2014-01-13 00:00:00.000         1   NULL
  11    rajeev123           2014-01-29 22:00:13.000         1   NULL
  12    saurbh123           2014-01-29 22:00:13.000         1   NULL
  13    jitu                2014-01-29 22:00:13.000         1   NULL
  14    rajeev123           2014-01-29 22:01:03.000         NULL    1
  15    saurbh123           2014-01-29 22:01:03.000         1   NULL
  16    jitu                2014-01-29 22:01:03.000         1   NULL
  7         tetu1234        2014-01-07 00:00:00.000         NULL    1
  8         jitu                2014-01-08 00:00:00.000         NULL    1

Your second query needs to use aggregate functions. rjoin and ljoin refer to the original columns, not the aggregate columns in your output. Try this:

SET DATEFIRST 1;
SELECT  userid,
Sum(ISNULL(ljoin,0)) AS ljoin,
Sum(ISNULL(rjoin,0)) AS rjoin, DATEPART(wk, Date) AS WeekNumber,
CASE 
WHEN YEAR(DATEADD(DAY, 1-DATEPART(WEEKDAY, Min([date])), Min([date]))) < YEAR(Min([date]))
THEN
CAST(DATEADD(YEAR, DATEDIFF(YEAR, 0,DATEADD(YEAR, 0 ,GETDATE())), 0) AS Varchar(50))  
+ ' TO ' + Cast(DATEADD(dd, 7-(DATEPART(dw, Min([date]))), Min([date]))  AS Varchar(50))
ELSE
Cast(DATEADD(DAY, 1-DATEPART(WEEKDAY, Min([date])), Min([date])) AS Varchar(50)) 
+ ' TO ' +     Cast(DATEADD(dd, 7-(DATEPART(dw, Min([date]))), Min([date]))  AS Varchar(50))
END AS  DateRange,
Case 
  When Sum(ISNULL(ljoin,0)) <= Sum(ISNULL(rjoin,0)) Then Sum(ISNULL(ljoin,0)) 
  Else Sum(ISNULL(rjoin,0)) 
End As pair
FROM Pairs_Details  where  userid='jitu'
Group By userid,DATEPART(wk, Date)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM