1

少し問題があります。データベース内のユーザー ID からステータスを選択する必要があります。問題は、各ユーザー ID に複数の行があり、日付スタンプが異なることです。履歴を保持するには、データベースに。

UserID でグループ化してみましたが、最新の行だけではなく、一部のユーザーで複数の行が表示されます。

これは私のクエリです:

select status, userid from EmployeeTable 
where UserId in ('nis','rele')
and asofdate in 
(select max(asofdate) from 
EmployeeTable
where userid in ('nis','rele')
group by userid
)

したがって、EmployeeTable には AsOfDate 列があり、これは基本的に更新日です。したがって、特定の UserID について、AsOfDate が最も高い行のみが必要です。私は何を間違っていますか?私はそれが in 句を使用していることに関係していると推測しています。そこに入れるユーザーIDが多いほど、複数のユーザーIDが複数の行を出力しますが、パフォーマンスのために一度に複数のユーザーを選択できる必要があります。

4

2 に答える 2

4

あなたが間違っているのは、特定のユーザーと特定の日付をチェックしているが、各ユーザーとそれに対応する日付との間に関係がないということです。ユーザーが別のユーザーの最新の日付と一致するレコードを持っている場合は、そのレコードも取得します。

ユーザーIDとそれに対応する最新の日付を取得してから、テーブルに対して再度結合して、そのレコードのステータス値を取得します。

select e.status, e.userid from EmployeeTable e
inner join (
  select userid, max(asofdate) as d
  from EmployeeTable
  where userid in ('nis','rele')
  group by userid
) u on u.userid = e.userid and u.d = e.asofdate
于 2012-09-03T10:54:24.887 に答える
3

これを試して:

SELECT status,userid 
FROM   EmployeeTable E
JOIN
    (SELECT  UserId ,max(asofdate) as asofdate
    FROM     EmployeeTable
    WHERE    userid in ('nis','rele')
    GROUP BY UserId )a
ON  E.userid =a.userid 
AND E.asofdate=a. asofdate
于 2012-09-03T10:48:34.103 に答える