Solved

Quick sql help

Posted on 2011-02-16
14
185 Views
Last Modified: 2012-05-11
Hi,
Please have a look at the sql below.
How can I get the week of the month in this sql?
I.e weeks as 1, 2 ,3 ,4 for every month may be in  another column

THanks
select model, cast(DatePart(year, date) as varchar(10)) + '/' + cast( DatePart(quarter, date) as varchar(10)) + '/' +  cast(DatePart(ww, date) as varchar(10)) as date1, DatePart(ww, date)  as week1, count(MAN) as count1
from table
where DatePart(year, date) >= 2010
group by model, cast(DatePart(year, date) as varchar(10)) + '/' + cast( DatePart(quarter, date)  as varchar(10))+ '/' +  cast(DatePart(ww, date) as varchar(10)) , DatePart(ww, date)

Open in new window

0
Comment
Question by:SameerMirza
  • 8
  • 3
  • 2
  • +1
14 Comments
 
LVL 51

Expert Comment

by:HainKurt
ID: 34908644
what does this mean "week of the month"?
0
 
LVL 51

Expert Comment

by:HainKurt
ID: 34908647
0
 
LVL 51

Expert Comment

by:HainKurt
ID: 34908654
maybe this

DATEPART(DAY, GETDATE() - 1) / 7 + 1 AS theWeekWithinMonth
0
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 
LVL 3

Expert Comment

by:QuinnDester
ID: 34908714
not sure if you want the week of the curent month or the number of the current week.

the code Hankurt gave you will give you the number of the week in the current month, this will give you the number of the current week

SELECT DATEPART( wk, GETDATE() )
0
 
LVL 51

Expert Comment

by:HainKurt
ID: 34908746
or maybe this

DatePart(ww, @date) - DATEPART(ww, dateadd(day, -datepart(day, @date)+1, @date))
0
 
LVL 51

Expert Comment

by:HainKurt
ID: 34908832
the one i posted above @ 34908746 gives you the diff between weeknumber of a date and the weeknumber of 1st day of that date

@date = 2011-02-16 -- current date
DatePart(ww, @date) = 8 -- week number of current date
dateadd(day, -datepart(day, @date)+1, @date) = 2011-02-01 -- first day of current date
DATEPART(ww, dateadd(day, -datepart(day, @date)+1, @date)) = 6 - week number of above

and the differnce is what you want I guess:

8-6 = 2

or maybe +1 is what you want

DatePart(ww, @date) - DATEPART(ww, dateadd(day, -datepart(day, @date)+1, @date)) +1


0
 

Author Comment

by:SameerMirza
ID: 34908885
I am lost...
how would tackle years in this one?
0
 
LVL 51

Expert Comment

by:HainKurt
ID: 34908926
ok, summary:

this is what you want

DatePart(ww, date) - DATEPART(ww, dateadd(day, -datepart(day, date)+1, date)) +1
or
DATEPART(DAY, date- 1) / 7 + 1

here is the implemenattion in your query:

select model, cast(DatePart(year, date) as varchar(10)) + '/' + cast( DatePart(quarter, date) as varchar(10)) + '/' +  cast(DatePart(ww, date) as varchar(10)) as date1, DatePart(ww, date)  as week1, count(MAN) as count1, DATEPART(DAY, date- 1) / 7 + 1 week_of_month
from table
where DatePart(year, date) >= 2010
group by model, cast(DatePart(year, date) as varchar(10)) + '/' + cast( DatePart(quarter, date)  as varchar(10))+ '/' +  cast(DatePart(ww, date) as varchar(10)) , DatePart(ww, date), DATEPART(DAY, date- 1) / 7 + 1

if this is not what you want, try the other option
0
 
LVL 2

Expert Comment

by:Eric3141
ID: 34908946
Try this.  I'm not at work so cannot verify but should be close.  







Declare
   @Date         datetime

-- Get first day of the week that Jan 1st falls in
Set @Date = select DATEADD(wk, DATEDIFF(wk,0,’01-Jan-2011’), 0);


While datepart(year, @Date) = ‘2011’
     BEGIN
	Select @Start_Date, datepart(week, @Date)

         -- add one week
         SET @Date = DateAdd(day, 7, @Date)
     END

Open in new window

0
 
LVL 2

Expert Comment

by:Eric3141
ID: 34908959
Sorry -- a typo above.  Use this instead.
Declare
   @Date         datetime

-- Get first day of the week that Jan 1st falls in
Set @Date = select DATEADD(wk, DATEDIFF(wk,0,’01-Jan-2011’), 0);


While datepart(year, @Date) = ‘2011’
     BEGIN
	Select @Date, datepart(week, @Date)

         -- add one week
         SET @Date = DateAdd(day, 7, @Date)
     END

Open in new window

0
 
LVL 51

Accepted Solution

by:
HainKurt earned 500 total points
ID: 34908964
you can delete

"DatePart(ww, date)  as week1," from select and delete "DatePart(ww, date)," from group by

select model, cast(DatePart(year, date) as varchar(10)) + '/' + cast( DatePart(quarter, date) as varchar(10)) + '/' +  cast(DatePart(ww, date) as varchar(10)) as date1, count(MAN) as count1, DATEPART(DAY, date- 1) / 7 + 1 week_of_month
from table
where DatePart(year, date) >= 2010
group by model, cast(DatePart(year, date) as varchar(10)) + '/' + cast( DatePart(quarter, date)  as varchar(10))+ '/' +  cast(DatePart(ww, date) as varchar(10)) , DATEPART(DAY, date- 1) / 7 + 1

if you dont need that column at all after adding week_of_month
0
 

Author Comment

by:SameerMirza
ID: 34909147
First of all thanks alot for help. But may be I need a little more :)
DATEPART(DAY, date- 1) / 7 + 1 as week_of_month --- how does this work?

(7-1)/7+1 - 1.857 = 2 ----

when I see it against record. I see,

test      2010/1/2           14        1

according to my understanding it should have been showing

test      2010/1/2           14        3

Isnt it?
0
 

Author Closing Comment

by:SameerMirza
ID: 34909251
its kool. as I can see and work out what to add.
But may be you can post further scomments if you like.

Thanks
0
 
LVL 51

Expert Comment

by:HainKurt
ID: 34909570
Here I put all logic discussed here

I prefer this one because it looks more logical

DatePart(ww, @date) - DATEPART(ww, dateadd(day, -datepart(day, @date)+1, @date)) +1

check this query, wom3 is more accurate... if you can define what is the first week of a month, then we can write the qry... for now you can use wom3 :)

(change -5 to any number to test that day, +/- any number)
declare @date datetime = getdate()-5;

select @date date, 
DatePart(ww, @date) ww_date,
DATEPART(ww, dateadd(day, -datepart(day, @date)+1, @date)) ww_1stDayofmonth,
DATEPART(DAY, @date - 1) / 7 + 1 wom1,
DATEPART(DAY, @date) / 7 + 1 wom2,
DatePart(ww, @date) - DATEPART(ww, dateadd(day, -datepart(day, @date)+1, @date)) +1 wom3

Open in new window

0

Featured Post

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

by Mark Wills PIVOT is a great facility and solves many an EAV (Entity - Attribute - Value) type transformation where we need the information held as data within a column to become columns in their own right. Now, in some cases that is relatively…
When writing XML code a very difficult part is when we like to remove all the elements or attributes from the XML that have no data. I would like to share a set of recursive MSSQL stored procedures that I have made to remove those elements from …
In a recent question (https://www.experts-exchange.com/questions/28997919/Pagination-in-Adobe-Acrobat.html) here at Experts Exchange, a member asked how to add page numbers to a PDF file using Adobe Acrobat XI Pro. This short video Micro Tutorial sh…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

813 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now