2014-09-30 5 views
0

누구나 내가 여기에없는 것을 알려 줄 수 있습니까?다른 입력 매개 변수를 기반으로하는 최대 날짜

SELECT fld1, fld2, fld3, 
MAX(DATE) OVER  (PARTITION BY fld1, fld2, fld3) 
FROM table1 where fld1 = userinput1 and Fld2 = userinput2 and Fld3 = userinput3 

사용자가 userinput1, userinput2 및 userinput3을 입력하면 해당 조합을 기준으로 최대 날짜를 원합니다.
userinput1과 userinput3 만 입력하면 userinput1, userinput2 조합을 기준으로 최대 날짜를 지정합니다.
사용자가 userinput3 만 입력하면 해당 unerinput3을 기준으로 최대 날짜를 원합니다. 이 사전 제반에게 램

Table1 has 

Fld1 fld2 fld3 date 

1   a  A  01/01/2014 
1   a  A  01/02/2014 
1   a  B  01/03/2014 
1   b  C  01/04/2014 
1   b  C  01/05/2014 
1   c  D  01/06/2014 
2   a  A  01/07/2014 


userinput1 = 1 
unerinput2 = a 
userinput3 = A 

Max Date should be 01/02/2014 


userinput1 = 1 
unerinput2 = a 
userinput3 = user doesn’t enter anything 

Max Date should be 01/03/2014 


userinput1 = 1 
unerinput2 = user doesn’t enter anything 
userinput3 = user doesn’t enter anything 

Max Date should be 01/06/2014 



userinput1 = user doesn’t enter anything 
unerinput2 = user doesn’t enter anything 
userinput3 = user doesn’t enter anything 


Max Date should be 01/07/2014 

감사를 할 수있다 사실

답변

0

당신은 당신이 (당신이 항상해야하는) 사용중인 데이터베이스를 지정하지 않았기 때문에 난 MS SQL Server를 가정합니다. 당신은 단지 최대 (날짜)를 원하고 나는 (나는 완전히 당신이 원하는 무엇을 오해하지 않는 한)이 코드가 작동해야한다고 생각 다른 컬럼에 관심이없는 경우

는 :

DECLARE @userinput1 int = 1 
DECLARE @userinput2 char = 'a' 
DECLARE @userinput3 char = 'A' 

SELECT MAX(DATE) 
FROM Table1 
WHERE 
    fld1 = CASE WHEN @userinput1 IS NULL THEN fld1 ELSE @userinput1 END 
    AND 
    fld2 = CASE WHEN @userinput2 IS NULL THEN fld2 ELSE @userinput2 END 
    AND 
    fld3 = CASE WHEN @userinput3 IS NULL THEN fld3 ELSE @userinput3 END 

을 여기에 출력을 표시하는 sample SQL Fiddle입니다 다른 변수 조합으로

관련 문제