2012-10-30 7 views
1

고객 정보 레코드를 처음 만든 사용자를 표시해야하는 쿼리가 있습니다.레코드를 만들 때 첫 번째 날짜 가져 오기

select CustID, Title, Firstname, Surname, IDNumber, min(ModifyDate) as ModDate, sUsername 
from Customers 
where StatusCode = 'PI' 
group by CustlD,Title,Firstname,Surname,IDNumber,sUsername 

내 결과가 아래에 표시됩니다 : 아래에있는 내 쿼리를 참조

1 MR CHARL 8607295 2012-10-23 14:20:31.407 User1 
1 MR CHARL 8607295 2012-10-24 12:36:09.023 User2 
2 MISS XABA  8307297 2012-10-23 14:23:08.593 User1 
2 MISS XABA  8307297 2012-10-24 14:57:29.603 User2 

나는 첫 번째 기록 및 제 3 기록이 필요합니다. 내가 여기서 뭘 잘못하고 있는거야?

+1

무엇 데이터베이스? MySQL/Oracle/SQL Server? – shahkalpesh

답변

0
select CustID, c1.Title, Firstname, Surname, IDNumber, ModifyDate as ModDate, sUsername 
from Customers c 
where StatusCode = 'PI' and c.ModifyDate = (SELECT TOP 1 ModifyDate FROM Customers c_ WHERE c_.CustID = c.CustID ORDER BY ModifyDate ASC) 

UPDATE :

select CustID, Firstname, Surname, IDNumber, ModifyDate as ModDate, sUsername 
from dbo.test32 c 
where c.ModifyDate = (SELECT TOP 1 ModifyDate 
         FROM (
          SELECT CustID, ModifyDate, CASE WHEN sUserName = 'User1' THEN ROW_NUMBER() OVER (PARTITION BY sUserName ORDER BY ModifyDate ASC) ELSE 2 END AS sn 
          FROM dbo.test32 
          ) c_ 
         WHERE c_.sn > 1 AND c_.CustID = c.CustID ORDER BY ModifyDate ASC) 
+1

고마워. 실제로 실수를 저질렀습니다. 고객 ID 당 두 번째 레코드가 필요합니다. 두 번째 레코드를 얻으려면 어떻게해야합니까? – user1668123

+0

@ user1668123 나는 절대적으로 이해하지 못합니다. 2 및 3 기록? –

+0

데이터가 자동으로 시스템에로드되므로 첫 번째 사용자는 사용자 1입니다. 필요한 정보는로드 된 후 정보를 수정 한 사용자 레코드입니다. 처음 수정 한 사람은 항상 사용자 1입니다. – user1668123

0

당신이 ROW_NUMBER() (오라클, SQL 서버, PostgreSQL을 등의 현대적인 버전)를 지원하는 데이터베이스 시스템에있어 가정 :

select CustID, Title, Firstname, Surname, IDNumber, ModifyDate, sUsername 
from (
    select 
     *, 
     ROW_NUMBER() OVER (
      PARTITION BY CustID 
      ORDER BY ModifyDate) rn 
    from Customers) c 
where StatusCode = 'PI' and rn=1 
0

를 대신 사용해보십시오 :

SELECT 
    c1.CustID, 
    c1.Title, 
    c1.Firstname, 
    c1.Surname, 
    c1.IDNumber, 
    c2.ModDate, 
    c1.sUsername 
FROM Customers c1 
INNER JOIN 
(
    SELECT CustID, min(ModifyDate) AS ModDate 
    FROM Customers 
    GROUP BY CustID 
) c2 ON c1.CustID = c2.custID AND c1.ModifyDate = c2.ModDate 
WHERE c1.StatusCode = 'PI' 

를하지만, 경우 SQL 서버를 사용하고 있다면 @Damien_The_Unbeliever's answer처럼 ROW_NUMBER을 사용하면됩니다.

관련 문제