sql server 2008 - SQL - Select Record High For Each Day of the Week -
it returns rows sorted countofrecords desc. i'd have 7 rows here, showing highest value ever specified day. each day of week should occur once , once. possible without lot of pain?
select count(*) countofrecords, cast(floor(cast([visit].[datetimeentered] float)) smalldatetime) dateentered, datepart(dw, visit.datetimeentered) dayoftheweek visit inner join useragent on useragent.useragentid = visit.useragentid useragent.isbot = 0 group cast(floor(cast([visit].[datetimeentered] float)) smalldatetime), datepart(dw, visit.datetimeentered) order countofrecords desc
edit1:
think both answers getting @ same thing. i've accepted 1 posted first. i'm going mention worked right off bat while other did not. i'm getting following errors when run marc_s's query:
msg 207, level 16, state 1, line 29 invalid column name 'rownum'. msg 207, level 16, state 1, line 25 invalid column name 'countofrecords'. msg 207, level 16, state 1, line 26 invalid column name 'dateentered'. msg 207, level 16, state 1, line 27 invalid column name 'dayoftheweek'.
special marc_s pointing out simple way date portion datetime.
based on query:
with groupedbyday ( select count(*) countofrecords, cast(floor(cast([visit].[datetimeentered] float)) smalldatetime) dateentered visit inner join useragent on useragent.useragentid = visit.useragentid useragent.isbot = 0 group cast(floor(cast([visit].[datetimeentered] float)) smalldatetime) ), ranked ( select countofrecords, dateentered, dow = datename(dw, dateentered), rank = row_number() on (partition datepart(dw, dateentered) order countofrecords desc) groupedbyday ) select countofrecords, dateentered, dow ranked rank = 1 order countofrecords desc
this return 1 row each day of week represented in table. if there may duplicates countofrecords
among maximum values , want return them all, use rank()
instead of row_number()
.
Comments
Post a Comment