0

2 つのテーブルがあり、1 つはルックアップ テーブルで、もう 1 つはトランザクション ログです。

Lookup table User: UserId, Name and Department.
Transaction log table EntryLog:  LogID, UserId, TimeIn, TimeOut

ユーザー テーブル内のすべてのユーザー (一意) の最終確認時刻 (TimeIn または TimeOut) を表示するレポートを取得しようとしています。

次のクエリを試しましたが、うまくいきません。

SELECT DISTINCT (A.UserID), TimeIn, TimeOut, B.Name, B.Department FROM EntryLog A
  INNER JOIN User B ON B.UserId = A.UserId
  ORDER BY TimeOut DESC, TimeIn DESC

どういうわけか、結果はトランザクションログからすべてのレコードを取得しているようです (UserId の繰り返しを含む)。私はSQLステートメントが苦手で、無駄に同様の問題を探しています。どんなアドバイスでも大歓迎です。前もって感謝します。

4

5 に答える 5

1

DistinctUserIdすべての重複行を除外するだけではありません。

あなたはGROUP BY UserID代わりにしたいです。SQL-Server >= 2005 を使用している場合は、ROW_NUMBER 関数で CTE を使用できます。

WITH CTE AS
(
   SELECT A.UserID, TimeIn, TimeOut, B.Name, B.Department 
      , ROW_NUMBER()OVER(PARTITION BY UserID Order By Timeout DESC, TimeIn Desc)AS RN
   FROM EntryLog A INNER JOIN User B ON B.UserId = A.UserId 
)
SELECT * FROM CTE WHERE RN = 1
于 2012-09-04T06:18:38.573 に答える
0

これを試して

SELECT A.UserID, TimeIn, TimeOut, B.Name, B.Department 
FROM EntryLog A INNER JOIN User B ON B.UserId = A.UserId 
where A.LogID in (select MAX(LogID) from EntryLog group by USERID)
于 2012-09-04T06:19:19.617 に答える
0

GROUP BY を使用してユーザー ID でグループ化し、HAVING 句を MAX で TimeIn と TimeOut に使用する必要があります。

于 2012-09-04T06:15:45.173 に答える
0

これを試して、

SELECT  a.UserID, b.TimeIN, b.TimeOut,
        a.Name, a.Department
FROM    Usertable a
            INNER JOIN logTable b
                ON a.userID = b.userid
            INNER JOIN
            (
                SELECT      UserID, MAX(TimeIN) as maxTimeIN
                FROM        logTable
                GROUP BY    UserID
            ) c ON b.userID = c.userID AND
                   b.TimeIN = c.MaxTimeIN
于 2012-09-04T06:16:33.663 に答える
0

重複列ではなく重複行を削除するためGROUP BY、句を使用する代わりに使用できます。次のようなことができます。DISTINCTDISTINCT

SELECT A.UserID, TimeIn, TimeOut, B.Name, B.Department FROM EntryLog A
INNER JOIN User B ON B.UserId = A.UserId
GROUP BY A.UserID, TimeIn, TimeOut, B.Name, B.Department
ORDER BY TimeOut DESC, TimeIn DESC
于 2012-09-04T06:16:45.237 に答える