a Table
======================================
PK_ID | name | Subject | Content
1 AAA 1번문제 1번문제입니다
2 BBB 2번문제 2번문제입니다
3 CCC 3번문제 3번문제입니다
4 DDD 4번문제 4번문제입니다
b Table -- level 1
===============================
a_PK_ID | name | Content | RegDate
1 EEEE 1번정답입니다 2016-08-23
2 FFFF 2번정답입니다 2016-08-23
3 GGG 3번정답입니다 2016-08-23
4 HHH 4번정답입니다 2016-08-23
c Table ---- level 2
===================================
a_PK_ID | name | content | RegDate
1 VVV 1번정답이 아닌거 같습니다 2016-09-02
1 ERr 1번정답이 아닌거 같습니다 2016-09-04
1 AAA 1번정답이 아닌거 같습니다 2016-09-13
2 BBB 2번정답이 아닌거 같습니다 2016-09-19
2 FFF 2번정답이 아닌거 같습니다 2016-09-24
4 JKU 4번정답이 아닌거 같습니다 2016-09-21
4 DDD 4번정답이 아닌거 같습니다 2016-09-22
한문제에 답변이 여러개 달려잇는데 1레벨은 각문제당 답변을 처음달았을때 저장되는거고 2레벨에는 처음 이상 답변달앗을때(두번째부터) 저장되는 디비입니다
디비 설계를 왜 이런식으로 햇는지 저도 궁금합니다
걸과
================================================
NO | name | subject | 최신 답변일자
1 AAA 1번문제입니다 2016-09-13
2 BBB 2번문제입니다 2016-09-24
3 CCC 3번문제입니다 2016-08-23 --->1 레벨 디비에 저장되어있는 날짜
4 DDD 4번문제입니다 2016-09-22
b table과 c table 을 조인해서 최신답변일자를 가지고 와야되는데 어떻게 해야하는지요?
Comment 3
-
이리
2016.09.20 11:16
;WITH a_table AS(SELECT 1 AS PK_ID, 'AAA' AS [name], '1번문제' AS [Subject], '1번문제입니다.' AS Content UNION ALLSELECT 2 AS PK_ID, 'BBB' AS [name], '2번문제' AS [Subject], '2번문제입니다.' AS Content UNION ALLSELECT 3 AS PK_ID, 'CCC' AS [name], '3번문제' AS [Subject], '3번문제입니다.' AS Content UNION ALLSELECT 4 AS PK_ID, 'DDD' AS [name], '4번문제' AS [Subject], '4번문제입니다.' AS Content), b_table AS(SELECT 1 AS a_PK_ID, 'EEEE' AS [name], '1번정답입니다' AS Content, '2016-08-23' AS RegDate UNION ALLSELECT 2 AS a_PK_ID, 'FFFF' AS [name], '2번정답입니다' AS Content, '2016-08-23' AS RegDate UNION ALLSELECT 3 AS a_PK_ID, 'GGG' AS [name], '3번정답입니다' AS Content, '2016-08-23' AS RegDate UNION ALLSELECT 4 AS a_PK_ID, 'HHH' AS [name], '4번정답입니다' AS Content, '2016-08-23' AS RegDate), c_table AS(SELECT 1 AS a_PK_ID, 'VVV' AS [name], '1번정답이 아닌거 같습니다' AS Content, '2016-09-02' AS RegDate UNION ALLSELECT 1 AS a_PK_ID, 'ERr' AS [name], '1번정답이 아닌거 같습니다' AS Content, '2016-09-04' AS RegDate UNION ALLSELECT 1 AS a_PK_ID, 'AAA' AS [name], '1번정답이 아닌거 같습니다' AS Content, '2016-09-13' AS RegDate UNION ALLSELECT 2 AS a_PK_ID, 'BBB' AS [name], '2번정답이 아닌거 같습니다' AS Content, '2016-09-19' AS RegDate UNION ALLSELECT 2 AS a_PK_ID, 'FFF' AS [name], '2번정답이 아닌거 같습니다' AS Content, '2016-09-24' AS RegDate UNION ALLSELECT 4 AS a_PK_ID, 'JKU' AS [name], '4번정답이 아닌거 같습니다' AS Content, '2016-09-21' AS RegDate UNION ALLSELECT 4 AS a_PK_ID, 'DDD' AS [name], '4번정답이 아닌거 같습니다' AS Content, '2016-09-22' AS RegDate)SELECT a.PK_ID AS [NO], a.[name] AS [name], a.Content AS [subject], ISNULL(c.RegDate, b.RegDate) AS RegDateFROM a_table AS aINNER JOIN b_table AS b ON a.PK_ID = b.a_PK_IDLEFT OUTER JOIN(SELECT a_PK_ID, MAX(RegDate) AS RegDateFROM c_tableGROUP BY a_PK_ID) AS c ON b.a_PK_ID = c.a_PK_ID의도하신 내용이 이것이 맞는지요? -
Terry
2016.09.20 11:17
테이블 설계가 왜 저런지 -_-;;;
하기 쿼리 참고하세요..
---쿼리시작---
;With a(PK_ID,name,Subject,Content) As
(
Select 1,'AAA','1번문제','1번문제입니다' Union All
Select 2,'BBB','2번문제','2번문제입니다' Union All
Select 3,'CCC','3번문제','3번문제입니다' Union All
Select 4,'DDD','4번문제','4번문제입니다'
)
,b(a_PK_ID,name,Content,RegDate) As
(
Select 1,'EEEE','1번정답입니다','2016-08-23' Union All
Select 2,'FFFF','2번정답입니다','2016-08-23' Union All
Select 3,'GGG' ,'3번정답입니다','2016-08-23' Union All
Select 4,'HHH' ,'4번정답입니다','2016-08-23'
)
,c(a_PK_ID,name,content,RegDate) As
(
Select 1,'VVV','1번정답이 아닌거 같습니다','2016-09-02' Union All
Select 1,'ERr','1번정답이 아닌거 같습니다','2016-09-04' Union All
Select 1,'AAA','1번정답이 아닌거 같습니다','2016-09-13' Union All
Select 2,'BBB','2번정답이 아닌거 같습니다','2016-09-19' Union All
Select 2,'FFF','2번정답이 아닌거 같습니다','2016-09-24' Union All
Select 4,'JKU','4번정답이 아닌거 같습니다','2016-09-21' Union All
Select 4,'DDD','4번정답이 아닌거 같습니다','2016-09-22'
)
Select a.PK_ID As NO
,a.name As name
,a.Subject As subject
,IsNull(d.RegDate,'') As RegDate
From a
Left Outer Join
(
Select d.a_PK_ID
,d.RegDate As RegDate
From
(
Select b.a_PK_ID
,b.RegDate
,1 As seq
From b
Where Not Exists (
Select 'x'
From c
Where b.a_PK_ID = c.a_PK_ID
)
Union All
Select c.a_PK_ID
,c.RegDate
,Row_Number() Over(Partition By c.a_PK_ID Order By c.RegDate Desc) As seq
From c
) d
Where d.seq = 1
)
d
On a.PK_ID = d.a_PK_ID
---쿼리끝--- -
문상연
2016.09.20 15:09
두분다 대단하십니다 늘 고맙습니다