database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6267 게시물 읽기
No. 6267
날짜사이의 데이터 가져오기
작성자
저널리즘
작성일
2011-11-09 16:18
조회수
14,295

안녕하세요.

예를들어 연도,주,주 시작일,주 마지막일에 대한 테이블을 만들고

오늘 또는 특정일이 몇주 인지 찾는것을 하려는데요

2011년 1주차는 1월3일부터 1월9일까지일때

2011년 1월 5일의 주차를 검색하려는데

방법이 있을까요.

 

일일이 날짜를 모두 넣으면 1년의 데이터 ROW는 365개가 되어서 넘 많다하고

주차 정보만 넣으면 52개니까 괜찮다하는데..

1년이 보통 52주차정도 되는데.. 데이터를 저렇게 시작일과 마지막일 사이의 날짜를 찾아서 주차를 찾는것인데

쿼리로 가능할까요?

 

데이터

UID YEAR WEEK START_DATE FINISH_DATE CREATE_DATE UPDATE_DATE
1 2011 1 2011-01-03 2011-01-09 NULL NULL
2 2011 2 2011-01-10 2011-01-16 NULL NULL
3 2011 3 2011-01-17 2011-01-23 NULL NULL

..........

 

 

 

이 글에 대한 댓글이 총 15건 있습니다.

단지 특정날짜가 그 년도에 몇주차인지만 찾은것이면

DATEPART() 함수를 사용하시면 될듯 싶습니다.

SELECT DATEPART(WEEK, '2011-01-05')

 

 

지나가다님이 2011-11-10 09:42에 작성한 댓글입니다. Edit

답변 감사합니다만..

제가 원하는 답이 아닙니다.

 

해당월의 몇주차인가가 아니고요.

해당해의 몇주차인가인데요.

asp,jsp등 웹프로그래밍이나 sql,오라클등 db의 함수나 로직을 이용하면

2011년 1월1일의 경우 1주차가 됩니다.

여기선 2010년의 53주차라고 하여서 맞지가 않거든요.

 

즉. 여기서의 1주차는 1월3일부터 1월9일이에요

함수로 계산해서 나오는 식하고 다릅니다.

그래서 db로 주차관리를 하려는것이고요.

 

UID YEAR WEEK START_DATE FINISH_DATE CREATE_DATE UPDATE_DATE
44 2011 44 2011-10-31 2011-11-06 NULL NULL
45 2011 45 2011-11-07 2011-11-13 NULL NULL
46 2011 46 2011-11-14 2011-11-20 NULL NULL

 

지금처럼 오늘이 11월10일이면 그에 해당하는 주차는 45주차여야됩니다.

Select DATEPART(week,CAST('2011-11-10' AS DATETIME)) 

이걸 실행하면 46주차가 나올겁니다.

여기서 생각하는 45주차가 아니므로 db로 관리를 하려는것인데,

 

문제는 연단위 대략 52주차의 정보를 52개 rows로 관리해야된다는거죠.

2개의 컬럼에 시작일과 마지막일을 가지고서 그 사이에 있는 데이터를 찾는게

쉽지 않을터인데..그렇게 해야된다는건데..방법이 생각나지 않습니다.

start_date의 11월7일과 finish_date의 11월13일 사이의 11월10일을 찾아서

해당 되는 주차수인 45를 찾는것인데.... 어떤식으로 해야되는가 이죠.

 

매일 365일을 1개의 컬럼에 넣어서 하면 쉽지만.. 1년 데이터가 365 row로 많아서 관리하기도

실수로 입력할수도 있다하여 안된다하니.. 그게 문제죠.

 

과연 어떻게 해야될까요 성능(속도)도 생각해야되고.. 컬럼의 수는 많지 않아야되고,

마찬가지로 rows수도 연단위 주차수인 52개정도씩 있어야된다하니 말이죠.

저널리즘님이 2011-11-10 10:55에 작성한 댓글입니다. Edit

제가 제대로 이해하고 했나 모르겠네요;;

 

윗부분은 테이블 참조 안하고 그냥 바로 구하는 방법이고

아래는 테이블 만드는 것입니다.

 

 

-- 월요일을 주 시작일로 변경

SET DATEFIRST 1           

 

DECLARE @DATE DATETIME

DECLARE @WEEK_FIRST DATETIME

DECLARE @YEAR_FIRST DATETIME

 

SET @DATE = '2012-06-30'

-- 입력받은 일자 월요일로 변경

SET @WEEK_FIRST = @DATE - (DATEPART(DW, @DATE) - 1)                                  

-- 해당년도 11

SET @YEAR_FIRST = DATEADD(YEAR, DATEDIFF(YEAR, 0, @WEEK_FIRST), 0)

 

-- DATEPART로 주차 구하고 11일이 월요일이 아니면 -1

SELECT DATEPART(YEAR, @YEAR_FIRST) AS '년도'

       , DATEPART(WEEK, @WEEK_FIRST) + (CASE WHEN DATEPART(DW, @YEAR_FIRST) = 1 THEN 0 ELSE -1 END) AS ''

 

 

 

-- 확인용 테이블겸 검색으로 할때

-- DROP TABLE CAL1

 

CREATE TABLE CAL1

(

       DATE DATETIME

       , YEAR_WEEK INT

)

 

SET DATEFIRST 1

 

DECLARE @DATE1 DATETIME

DECLARE @DATE2 DATETIME

DECLARE @WEEK_FIRST DATETIME

DECLARE @YEAR_FIRST DATETIME

 

SET @DATE1 = '1990-01-01'

SET @DATE2 = '2013-01-01'

 

WHILE(@DATE1 < @DATE2)

BEGIN

       SET @WEEK_FIRST = @DATE1 - (DATEPART(DW, @DATE1) - 1)

       SET @YEAR_FIRST = DATEADD(YEAR, DATEDIFF(YEAR, 0, @WEEK_FIRST), 0)

 

       INSERT INTO CAL1 VALUES (@DATE1, DATEPART(WEEK, @WEEK_FIRST) + (CASE WHEN DATEPART(DW, @YEAR_FIRST) = 1 THEN 0 ELSE -1 END))

 

       SET @DATE1 = @DATE1 + 1

END

 

 

SELECT * FROM CAL1

 

향지(jumdol625)님이 2011-11-10 15:01에 작성한 댓글입니다.
이 댓글은 2011-11-10 15:03에 마지막으로 수정되었습니다.

그럼 그 해의 마지막이

일월화수목금토

28 29 30 31 1 2 3

이렇게 되어 있으면 그해 마지막주가 되나요 다음해의 첫째주가 되나요?

 

그리고 이건 제 생각인데 하루에 1개의 Row라면 100년동안 해봐야

36500개밖에 안되는데 속도나 관리 측명에서 특별히 문제 되지 않을것 같은데요

 

착한넘(agoodman99)님이 2011-11-10 17:18에 작성한 댓글입니다.

향지님 감사합니다.

 

답변주신것으로 데이터를 확인하니..

1년의 rows가 보통 52개가 되어야되는데..365개가되네요.

해당일의 데이터는 맞습니다만

원하는 답은 아니지만 정확한 주차 데이터를 표현이 되어서  설명드립니다.

 

컬럼엔 시퀀스, 연도, 주차, 시작일,마지막일(,작성일,수정일)이 반드시 있어야 됩니다.

시작일과 마지막일의 데이터도 웹에서 표현을 하기때문이죠.

또한 관리자가 쉽게 한눈에 보기위함이죠

그렇기 위해서는 1년에 52주,, 즉 52개 줄만있으면되고

365개가 있으면 관리가 힘들어질수 있어서 안된다는거죠.

 

데이터 컬럼엔 시작일과 마지막일이라는 컬럼이 있어야되고요.

 

데이터

UID YEAR WEEK START_DATE FINISH_DATE CREATE_DATE UPDATE_DATE

...2000년부터......


1 2011 1 2011-01-03 2011-01-09 NULL NULL
2 2011 2 2011-01-10 2011-01-16 NULL NULL
3 2011 3 2011-01-17 2011-01-23 NULL NULL

..........

44 2011 44 2011-10-31 2011-11-06 NULL NULL
45 2011 45 2011-11-07 2011-11-13 NULL NULL
46 2011 46 2011-11-14 2011-11-20 NULL NULL

...2020년까지........

이런식으로 2000년부터 2020년까지의 데이터를 db에 삽입해둡니다.

 

늘 오늘이 기준입니다.

오늘이 2011년 11월 10일이라면 오늘에 해당하는 주차는 45주차가 되겠죠

그래서 45주차( 2011-11-07 ~ 2011-11-13 ) 이런식으로 활용을 할것입니다.

 

만약 오늘이 2012년 1월 1일이라면,

주차는 2011년 52주차가 되어야됩니다.

그래서 db 데이터에도

시퀀스 2011 52 2011-12-26 2012-01-01 NULL NULL

이런식으로 들어갑니다.

사용은 마찬가지로   52주차 ( 2011-12-26 ~ 2012-01-01 )

이런식이죠.

 

중요한게..

시작일과 마지막일에 해당 데이터가 없는데.. 찾아야되는거죠.

 

오늘이 2011.11.10인데.. 오늘에 해당하는 주차를 찾기위해

주차 테이블에 오늘 정보는 없이 단지 시작일과 마지막일과 연도에 대한 정보가지고

주차를 찾는것입니다.

 

시작일 컬럼의 2011.11.7과 마지막일 컬럼의 2011.11.13  그리고 연도 컬럼의 2011. 주차컬럼은 45.

오늘이 2011.11.10인데 오늘이 45주차라는것을 찾는것인데

임시테이블로 시작일과 마지막일 사이의 데이터를 임의로 만들어서 그에 해당하는것을 찾으면 될거

같긴한데..간단하겐 안되는거같습니다.

 

성능을 생각해서... 조금더 고민해주시기를 부탁드립니다.

감사합니다.

 

 

 

저널리즘님이 2011-11-10 17:32에 작성한 댓글입니다. Edit

착한넘(agoodman99)님.

 

우선 이곳에선 시작일(월)부터 마지막일(일)까지 기준으로 알고있고요

그래서 2011년 정보기준으로 설명드린거였습니다.

 

데이터는 이미 지난 2004년정도부터 미래의 2020년정도까지를

db에 삽입해서 웹으로 표현할겁니다.

즉. 이미 예전의 데이터도 있는데..주차는그대로 사용하지만

2011년 주차정보가 로직상으로 들어가 있는것으로 사용하니

여기서 사용하는것과 달라  마이그레이션을 해야되고요.

 

성능에 있어선 제가봐도 1년 365개의 rows가 있어도 속도에 있어선 크게 영향은 없지만

관리 측면에서 데이터가 많아서 힘들다 합니다.

즉 52개의 데이터만 갖고 있어도 되는데 365개를 갖고 있으면

데이터를 삽입하는데 있어서 실수의 가능성이 조금더 크다는거죠.

 

그래서 1년 365개가량의 데이터보단.. 52개가량의 데이터만 갖고 해야된다는것입니다.

관심가져주셔서 감사하고요

좋은 아이디어 언제든지 말씀주시면 고맙겠습니다.

 

 

저널리즘님이 2011-11-10 17:41에 작성한 댓글입니다. Edit

향지님이 만드신 로직이 맞다면 ..

제가 조금 수정해서 쿼리만 만들었습니다.(맘대로 수정해서 ㅈㅅㅈㅅ)

--DROP TABLE CAL1
CREATE TABLE CAL1
(
       DATE DATETIME
       , YEAR_WEEK VARCHAR(6)
)
 
SET DATEFIRST 1
 
DECLARE @DATE1 DATETIME
DECLARE @DATE2 DATETIME
DECLARE @WEEK_FIRST DATETIME
DECLARE @YEAR_FIRST DATETIME
 
SET @DATE1 = '2000-01-01'
SET @DATE2 = '2020-12-31'
 
WHILE(@DATE1 < @DATE2)
BEGIN
       SET @WEEK_FIRST = @DATE1 - (DATEPART(DW, @DATE1) - 1)
       SET @YEAR_FIRST = DATEADD(YEAR, DATEDIFF(YEAR, 0, @WEEK_FIRST), 0)
 
       INSERT INTO CAL1 VALUES (@DATE1, CONVERT(VARCHAR, DATEPART(Year,@YEAR_FIRST)) + CONVERT(VARCHAR, DATEPART(WEEK, @WEEK_FIRST) + (CASE WHEN DATEPART(DW, @YEAR_FIRST) = 1 THEN 0 ELSE -1 END)))
 
       SET @DATE1 = @DATE1 + 1
END
 
SELECT LEFT(Year_Week,4) YYYY
  , SUBSTRING(Year_Week,5,2) Week
  , MIN(CONVERT(VARCHAR(10), Date, 120)) Start_Date
  , MAX(CONVERT(VARCHAR(10), Date, 120)) Finish_Date
  FROM CAL1
 GROUP BY LEFT(Year_Week,4), SUBSTRING(Year_Week,5,2)
 order by 1, CONVERT(INT, SUBSTRING(Year_Week,5,2))

--> 이걸 원하시는건가요 아님 또 다른게 있나요?

제가 이해를 잘 못해서리..(저도 이와 비슷한걸로 꽤 고생을 했던기억이..)

착한넘(agoodman99)님이 2011-11-10 18:16에 작성한 댓글입니다.

제가 만든 쿼리 대단한것도 아니고

부지런히 공부해야되는 입장에서

다른분이 만든 쿼리문 보고 저도 배울수 있으면 더 좋은데

수정이야 얼마든지 환영입니다!

 

음.... 좀더 실시간으로 대화할수 있었으면 좋을텐데요;;

제가 이해를 잘 했나 모르겠는데

테이블은 정해져있고 검색할 쿼리문이 필요하시단 건가요?

입력으로 일자를 넣고

테이블에서 해당 년도와 주차를 찾는거라면

검색할때 시작일과 마지막일 사이의 데이터를 임의로 만들어야 될것 같진 않습니다.

 

 

-- 데이터 테이블

-- DROP TABLE CAL1

 

CREATE TABLE CAL1

(

       [UID] INT IDENTITY(1, 1)

       , [YEAR] SMALLINT

       , [WEEK] SMALLINT

       , [START_DATE] SMALLDATETIME

       , FINISH_DATE SMALLDATETIME

       , CREATE_DATE DATETIME

       , UPDATE_DATE DATETIME

)

 

 

SET DATEFIRST 1

 

DECLARE @DATE1 DATETIME

DECLARE @DATE2 DATETIME

DECLARE @WEEK_FIRST DATETIME

DECLARE @YEAR_FIRST DATETIME

 

SET @DATE1 = '2000-01-01'

SET @DATE2 = '2021-01-04'

 

WHILE(@DATE1 < @DATE2)

BEGIN

       SET @WEEK_FIRST = @DATE1 - (DATEPART(DW, @DATE1) - 1)

       SET @YEAR_FIRST = DATEADD(YEAR, DATEDIFF(YEAR, 0, @WEEK_FIRST), 0)

 

       INSERT INTO CAL1 VALUES (DATEPART(YEAR, @YEAR_FIRST)

                                              , DATEPART(WEEK, @WEEK_FIRST) + (CASE WHEN DATEPART(DW, @YEAR_FIRST) = 1 THEN 0 ELSE -1 END)

                                              , @WEEK_FIRST

                                              , @WEEK_FIRST + 6

                                              , NULL

                                              , NULL)

 

       SET @DATE1 = @DATE1 + 7

END

 

 

-- 1번. 인덱스 없을때 검색

DECLARE @DATE DATETIME

 

SET @DATE = '2000-01-03'

 

SELECT *

FROM CAL1

WHERE START_DATE <= @DATE

AND @DATE <= FINISH_DATE

 

 

 

-- 2번. UID 컬럼을 클러스터드 인덱스로해서 검색

CREATE UNIQUE CLUSTERED INDEX IDX_CAL1_UID ON CAL1(UID)

 

DECLARE @DATE DATETIME

 

SET @DATE = '2000-01-03'

 

SELECT *

FROM CAL1

WHERE UID = (DATEDIFF(DAY, 0, @DATE) / 7) - (DATEDIFF(DAY, 0, '2000-01-01') / 7) + 1

 

 

트래픽이 얼마나 될지 모르겠는데

지금 테이블 구조를 저런 형식으로 MSSQL 2005에서 만들었을때

1번처럼 검색해서 테이블 FULL SCAN 해도 6페이지 밖에 안되서 이런식으로 써도 될것 같습니다.

 

어떤일에 사용하시는지는 모르겠는데

혹시나 트래픽이 많다면 모자란 기교를 조금 부려서

UID로 클러스터드 인덱스 만들고 2번처럼 저런식으로 검색하시면 성능이 더 좋긴한데

저런식으로 만들면 꼭 만들지 않아도 성능에 문제가 없는데 괜히 신경 써야되는 쿼리문 하나 만드는 것일수도 있구요.

(2번 쿼리문 저런식으로 써보신분 아니면 눈에 쉽게 안들어오실수도;;)

 

원하시는게 맞는가요;;

향지(jumdol625)님이 2011-11-10 20:36에 작성한 댓글입니다.

 해의 첫주는 1월 4일이 들어있는 주가 그 해의 첫번째 주이다. 라는 국제 표준이 있지요. ㅋ

ISO 8601:2004 http://dotat.at/tmp/ISO_8601-2004_E.pdf

간단한 설명http://blog.naver.com/uook_/130068616995

 

우욱님이 2011-11-11 00:58에 작성한 댓글입니다. Edit

wow bravo.

 

지나가다님.착한넘님.향지님,우욱님.. 모두 감사드립니다.

 

향지님께서 마지막으로 주신 댓글의 쿼리가 제가 원하는 답이 되었네요.

사실 쿼리로 원하는 데이터와 답이 나올줄은 반신반의했는데

그래서 제 기준으로는 결코 쉬운건 아니라 생각했는데,

정말 대단하시다는 생각이 듭니다.

 

저 외에도 이와 비슷한 경우로 고민하시는분들은

향지님의 쿼리가 큰 도움이 될거라 생각됩니다.

 

다시한번 깊은 감사드립니다.

 

2011.11.11 11:26수정

그런데 향지님 한가지 의문점이 있습니다.

쿼리로 만든 데이터를 보니

UID YEAR WEEK START_DATE FINISH_DATE CREATE_DATE UPDATE_DATE
680 2012 53 2012-12-31 00:00:00 2013-01-06 00:00:00 NULL NULL
681 2013 1 2013-01-07 00:00:00 2013-01-13 00:00:00 NULL NULL

...............

731 2013 51 2013-12-23 00:00:00 2013-12-29 00:00:00 NULL NULL
732 2013 52 2013-12-30 00:00:00 2014-01-05 00:00:00 NULL NULL
733 2014 1 2014-01-06 00:00:00 2014-01-12 00:00:00 NULL NULL

............
784 2014 52 2014-12-29 00:00:00 2015-01-04 00:00:00 NULL NULL
785 2015 1 2015-01-05 00:00:00 2015-01-11 00:00:00 NULL NULL

2012년 53주차와 2013년 1주차.  그리고 마찬가지로

2013년 52주차와 2014년 1주차요.

어떻게 보면 로직상으로는 맞지만..

주차계산은 잘못되는게 아닌가 싶습니다.

여기 담당자가 담주 월요일에 저 데이터를 보고 시작일,마지막일,주차가 다르다고 할거같은데요.

아마도 2012년 53주차는 없고 2013년1주차가 될거같습니다.

2013년 51주차는 52주차가 되고,53주차는 2014년 1주차가 되고..

 

주차 데이터를 다 만들지 않았지만, 향지님께서 만드신 로직으로 하려고 하니

문제가 있을듯하네요.

일반적으로 로직상의 데이터는 맞는거 같습니다만

여기에서 사용하는 주차,시작일,마지막일의 데이터는 확인해봐야겠습니다.

 

그래도 원하는 주차를 뽑는 로직(해당일이 시작일,마지막일에 해당하는 주차)이 맞아서

다행입니다.

 

case 1. 주차가 다른부분을 보정하는걸 생각하거나,

case2. 자동으로 계산된 주차,시작일,마지막일정보를 넣는것보다

              천상 매해 주차 정보를 정해서 db에 넣어야 될거같네요.

 

 

 

 

 

저널리즘님이 2011-11-11 10:02에 작성한 댓글입니다.
이 댓글은 2011-11-11 11:35에 마지막으로 수정되었습니다. Edit

음....

그냥 월요일부터 일요일까지로 자르는줄 알았는데

혹시 우욱님이 알려주신것처럼

1월 4일이 들어가는 주가 첫번째 월요일이 되는 규칙인가요?

향지(jumdol625)님이 2011-11-11 12:52에 작성한 댓글입니다.

저도 예전에 이것때문에 골치 아팠던적이 있었습니다.

매달 첫쨰주를 구해야 하는것인데 그달의 1일이 수요일 이전에 있냐 이후에 있냐로 첫째주를 정했었죠.

엄청 복잡하게 만들었는데 향지님이 참 쉽게 만드셨네요 ㅠㅠ..

어째든 우욱님 글처럼 1월 4일이 들어있는 주가 그해 첫번째주라고 했을때..

향지님이 만들어 놓은 CAL1 테이블의 데이터에서 수정하는 쿼리 만들어 봤습니다.

도움이 될지 모르겠네요.

UPDATE a
   SET a.Week = a.Week + b.Plus
  FROM CAl1 a
  INNER JOIN(
  SELECT Year, Week, Start_Date, CASE WHEN DATEPART(DAY,Start_Date) > 3 THEN 1 ELSE 0 END as Plus
    FROM CAL1
   WHERE Week = 1) b ON a.Year = b.Year

UPDATE a
   SET a.Week = CASE WHEN b.Chk = 1 THEN 1 ELSE a.Week END
  , a.Year = a.Year + b.Chk
  FROM Cal1 a
  INNER JOIN(
  select Year, MAX(Week) Week
    , CASE WHEN DATEPART(DAY,MAX(Finish_Date)) IN (4,5,6) THEN 1 ELSE 0 END AS Chk
    from Cal1
   GROUP BY Year) b ON a.Year = b.Year AND a.Week = b.Week

 

착한넘(agoodman99)님이 2011-11-11 14:01에 작성한 댓글입니다.

향지님.

주차의 기간은 월요일에 시작해서 일요일에 끝나는걸로 정해져 있고요.

그 기본은 월~일 이지만.. 매해 마지막주와 시작하는주에 있어서 데이터가 맞는지를

제가 11시에 댓글로 말씀드린것처럼 아무래도 담당자가 월요일에 출근해서 확인을 해봐야겠습니다.

 

그리고 우욱님께서 말씀하신게 일반적으로 정해진것이지만

여기에서도 그걸 사용하는지..아니면 여기서 생각하는게 다른지

정확히 담당자와 확인을해야 알겠네요.

왜냐하면 저도 그 정보를 인터넷으로 찾아서 여기서 적용하는 시작일,마지막일,주차가

맞나 샘플로 해봤더니 아니었었거든요.

 

 

착한넘님께서 만들어주신 보정로직의 데이터를 확인하니

523 2009 53 2009-12-28 00:00:00 2010-01-03 00:00:00 NULL NULL
524 2010 2 2010-01-04 00:00:00 2010-01-10 00:00:00 NULL NULL

836 2015 53 2015-12-28 00:00:00 2016-01-03 00:00:00 NULL NULL
837 2016 2 2016-01-04 00:00:00 2016-01-10 00:00:00 NULL NULL

 

2010년과 2016년에 1주차가 없네요.

 

 

일단 오늘까지의 데이터를 토대로 우선 결론을 드리자면,

현재 데이터 확인을 위한 담당자가 부재라서

제가 월요일에 담당자와 확인해서 1월4일이 들어가 있는게

매해 첫주차로 해야될지 아니면 향지님께서 짜주신대로...

원래 월요일부터 시작해서 일요일까지의 법칙대로만 하는지

정확히 확인해보도록 하겠습니다.

 

계속해서 관심과 도움주셔서 다시한번 감사드립니다.

 

저널리즘님이 2011-11-11 14:41에 작성한 댓글입니다. Edit

UPDATE a
   SET a.Week = a.Week + b.Plus
  FROM CAl1 a
  INNER JOIN(
  SELECT Year, Week, Start_Date, CASE WHEN DATEPART(DAY,Start_Date) > 4 THEN 1 ELSE 0 END as Plus
    FROM CAL1
   WHERE Week = 1) b ON a.Year = b.Year

UPDATE a
   SET a.Week = CASE WHEN b.Chk = 1 THEN 1 ELSE a.Week END
  , a.Year = a.Year + b.Chk
  FROM Cal1 a
  INNER JOIN(
  select Year, MAX(Week) Week
    , CASE WHEN DATEPART(DAY,MAX(Finish_Date)) IN (4,5,6) THEN 1 ELSE 0 END AS Chk
    from Cal1
   GROUP BY Year) b ON a.Year = b.Year AND a.Week = b.Week

저기 위해 4로 해야 하네요 ㅠㅠ

착한넘(agoodman99)님이 2011-11-11 18:56에 작성한 댓글입니다.

안녕하세요.

 

향지님의 데이터 삽입,주차 구하는 로직과 착한넘님의 보정 로직의 결과물이

여기에서 원하는 데이터가 일단 맞다고 하네요.

두분 덕분에 데이터를 만들고 이용하는데 큰 도움이 될거 같습니다.

 

다시한번 감사드립니다.

저널리즘님이 2011-11-14 17:25에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6275join 방법 질문입니다. [1]
주딩이
2011-11-13
6596
6272특정필드 업데이트하는 쿼리 또는 프로그램 찾기.. [1]
오리무중
2011-11-11
7126
6268뷰 삭제 관련 [1]
궁금이
2011-11-10
6836
6267날짜사이의 데이터 가져오기 [15]
저널리즘
2011-11-09
14295
6263트리거에서 따옴표 하는 방법 부탁드려요~ [2]
용태훈
2011-11-07
9762
6254컬럼안의 수학수식을 조회할때 계산된 값으로 얻고 싶습니다. [1]
권순환
2011-11-04
8561
6253view와 임시테이블 속도 [1]
이윤영
2011-11-02
7286
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.029초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다