2013-08-20 2 views
-1

임시 테이블에서 고유 한 행을 가져와 aspx 페이지로 출력하려고합니다. 한 열의 값을 사용하고 해당 열의 마지막 항목을 가져 오려고합니다.두 개의 열 값을 기반으로 고유 한 행을 얻는 중

저는 inner joinmax()을 사용하려고했습니다. 그러나 나는 실패했다.

다음 코드는 내가 수행하려고 시도한 코드입니다.

Declare @TempTable table (
    viewIcon nvarchar(10), 
    tenderType nvarchar(20), 
    diaryIcon int, 
    customerName nvarchar(100), 
    projectName nvarchar(100), 
    diaryEntry nvarchar(max), 
    diaryDate nvarchar(20), 
    pid nvarchar(20) 

    ) 

insert into @TempTable(
    viewIcon, 
    tenderType, 
    diaryIcon, 
    customerName, 
    projectName, 
    diaryEntry , 
    diaryDate , 
    pid 
    ) 

select p.viewicon, 
    p.[Tender Type], 
    1 diaryicon, 
    c.[Customer Name], 
    co.[Last Project], 
    d.Action, 
    co.[Diary Date], 
    p.PID 
    From Projects2 p Inner Join 
(select distinct Pno, max(convert(date,[date of next call],103)) maxdate from ProjectDiary group by Pno 
    ) td on p.PID = td.Pno 
Inner Join contacts3 co on co.[Customer Number] = p.[Customer Number] 
Inner Join Customers3 c on p.[Customer Number] = c.[Customer Number] 
Inner Join ProjectDiary d on td.Pno = d.Pno 
Where CONVERT(Date, co.[Diary Date], 103) BETWEEN GETDATE()-120 AND GETDATE()-60 

DECLARE @contactsTable TABLE 
    (pid nvarchar(200), 
    diaryDate date) 

insert into @contactsTable (t.pid, t.diarydate) 
select distinct pid as pid, MAX(CONVERT(DATE, diaryDate, 103)) as diaryDate from @  TempTable t group by pid 
DECLARE @tempContacts TABLE 
(pid nvarchar(200)) 

insert into @tempContacts(pid) 
select pid from @contactsTable 
DECLARE @tempDiaryDate TABLE (diaryDate date) 
insert into @tempDiaryDate(diaryDate) 
select distinct MAX(CONVERT(DATE, diaryDate, 103)) from @TempTable 

select t.* from @TempTable t inner join (select distinct customerName, M AX(CONVERT(DATE, diaryDate, 103)) AS diaryDate from @TempTable group by customerName) tt on t t.customerName=t.customerName 
where t.pid not in 
(select Pno from ProjectDiary where convert(date,[Date Of Next Call],103) > GETDATE()) 
and t.viewIcon <> '098' 
and t.viewIcon <> '163' 
and t.viewIcon <> '119' 
and t.pid in (select distinct pid from @tempContacts) 
and CONVERT(DATE, t.diaryDate, 103) in (select distinct CONVERT(DATE, diaryDate, 103) f rom @tempDiaryDate) 
order by CONVERT(DATE, tt.diaryDate, 103) 

어떤 레코드를 사용할지 결정하기 위해 최대 날짜를 사용하는 모든 개별 customerName을 얻으려고합니다.

+0

Soo 명확하지 않습니다. "한 열의 값을 사용하고 마지막 열을 해당 열로 가져 오려고합니다." 한 칼럼 - 우리는 어느 칼럼을 찾아야 만합니다. 마지막 항목을 정의하십시오. – Paparazzi

+0

메신저는 diaryDate를 사용하여 만든 최신 날짜 항목을 가져 와서 해당 고객에 대해 마지막으로 입력 한 항목을 반환하려고합니다. @Blam – GeoffWilson

답변

1

하위 쿼리를 사용하십시오. 전체 SQL 문을 거치지 않고 일반적인 생각은 다음과 같습니다.

Select [Stuff] 
From table t 
Where date = (Select Max(Date) from table 
       where customer = t.customer) 
+0

여전히 내 진술과 같은 결과 집합을 반환합니다. – GeoffWilson

관련 문제