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 番目のレコードだけが必要です。ここで何が間違っているのか分かりますか?

4

3 に答える 3

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-Serverを使用している場合は、 @Damien_The_Unbelieverの回答のROW_NUMBERようにを使用してこれを行うことができます。

于 2012-10-30T07:55:44.833 に答える
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)

アップデート:

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)
于 2012-10-30T13:48:34.293 に答える
0

ROW_NUMBER()以下をサポートするデータベース システム(最新バージョンの Oracle、SQL Server、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
于 2012-10-30T07:54:15.050 に答える