0

以下のクエリでは、GROUP BY句を使用して、更新された日付に応じて最近更新されたレコードのリストを取得しています。GROUP BYしかし、いくつかの内部的な理由により、句のないクエリが必要です。これを解決するために誰か助けてください。

SELECT Proj_UpdatedDate,
       Proj_UpdatedBy
FROM   ProjectProgress PP
WHERE  Proj_UpdatedDate IN (SELECT MAX(Proj_UpdatedDate)
                            FROM   ProjectProgress
                            GROUP BY
                                   Proj_ProjectID)
ORDER BY
       Proj_ProjectID
4

1 に答える 1

1

MAX(Proj_UpdatedDate) を意味していると仮定すると、TOP 1 を使用しても同じ結果が得られます。

SELECT Proj_UpdatedDate,
       Proj_UpdatedBy
FROM   ProjectProgress PP
WHERE  Proj_UpdatedDate IN (SELECT TOP 1 Proj_UpdatedDate
                            FROM   ProjectProgress
                            ORDER BY Proj_UpdatedDate DESC)
ORDER BY
       Proj_ProjectID

ただし、GROUPED BY Proj_ProjectId (各プロジェクトの最大日付) であるため、クエリは実際には複数の日付を返します。プロジェクトが更新された日付と誰によって更新されたかのリストを表示することは、あなたの望む結果ですか?

その場合は、ROW_NUMBER() を使用してみてください。

SELECT  Proj_UpdatedDate, Proj_UpdatedBy
FROM (
   SELECT ROW_NUMBER() OVER (PARTITION BY Proj_ProjectID ORDER BY Proj_UpdatedBy DESC) rn,
      Proj_UpdatedDate, 
      Proj_UpdatedBy
   FROM   ProjectProgress
  ) t 
WHERE rn = 1

そして、ここにSQL Fiddleがあります。これは、SQL Server 2005 以降を実行していることを前提としています。

幸運を。

于 2013-01-29T05:06:40.860 に答える