SQL 데이터베이스에 두 개의 테이블이 있습니다. '코스'와 '이벤트'코스 테이블에는 courseID (pk), coursecode 및 coursetitle 필드가 있습니다. 이벤트 테이블에는 eventID (pk) courseID (fk), startdate, enddate가 있습니다.가장 최근 날짜와 다음 날짜가있는 코스의 SQL 반환 목록
이벤트 테이블의 시작 날짜를 사용하여 일어난 마지막 날짜와 그 다음 날짜를 보여주는 열이있는 모든 강좌 목록을 반환해야합니다. 다음과 같이
이SELECT TOP 1
startdate as nextdate
FROM event
WHERE
CONVERT(VARCHAR(8),startdate,112) > CONVERT(VARCHAR(8), GETDATE(), 112)
AND coursecode = 'acc01'
ORDER BY startdate ASC
내가 표시 결과를 싶습니다 다음과 같이
나는 가장 최근의 날짜 또는 이벤트 테이블에서 특정 과정의 다음 날짜를 얻을 수
+------------+-------------+------------+-------------+------------+-------------+
| coursecode | coursetitle | lastevent | lasteventid | nextevent | nexteventid |
+------------+-------------+------------+-------------+------------+-------------+
| acc01 | Access | 2012-09-30 | 20127 | 2013-12-10 | 35612 |
| wrd37 | Word | 2013-11-02 | 34816 | NULL | NULL |
+------------+-------------+------------+-------------+------------+-------------+
나는 각 coursececode를 한 번 보여줄 필요가있다. (코스는 다른 공급자로부터 왔고 따라서 coursecode는 독특한 필드가 아니기 때문에 courseid 필드가 될 수있다.) 과정에 과거 날짜 또는 미래 날짜가 없거나 날짜가 전혀 없을 수도 있습니다. Null은 보고서 디자인에서 서식을 지정하기 때문에 date/eventid 필드에 괜찮습니다.
나는 질문을 반복하지 않기를 바란다. 그러나 나는 지금까지 여기에서 아무 것도 발견하지 못했다. 당신이 사용할 수있는
;WITH cteEventsLast
AS
(
SELECT e.CourseID,
MAX(e.StartDate) AS StartDate
FROM Event e
WHERE e.StartDate < GETDATE()
GROUP BY e.CourseID
),
WITH cteEventsNext
AS
(
SELECT e.CourseID,
MIN(e.StartDate) AS StartDate
FROM Event e
WHERE e.StartDate >= GETDATE()
GROUP BY e.CourseID
)
SELECT c.CourseCode,
c.CourseTitle,
el.StartDate AS LastEvent,
en.StartDate AS NextEvent
FROM Course c LEFT OUTER JOIN
cteEventsLast el ON (el.CourseID = c.CourseID) LEFT OUTER JOIN
cteEventsNext en ON (en.CourseID = c.CourseID)
이 예 공통 테이블 표현식을 사용 :
는, 비슷한 시도 사용하는 SQL 어떤 맛에 따라 어떤 도움
SQL의 맛은 무엇입니까? – geomagas
@geomagas 2008 R2 SP2 – laurencemadill
여러 'coursecode'는 'coursecode' 당 여러 개의'coursetitle '을 갖습니다. 제목 선택 기준은 무엇입니까? – geomagas