1

登録者のレコードが会社の従業員によっていつ閲覧されたかを記録するアクション ログ テーブルがあります。次のようなSQLクエリがあります。

SELECT [ID]
      ,[RegistrantID]
      ,[EmployeeID]
      ,[UserID]
      ,[CompanyID]
      ,[VacancyID]
      ,[Action]
      ,[ActionDate]
  FROM [Hrge].[dbo].[hr_ActionLog]
  where action = 4
  and CompanyID = 3
  order by ActionDate desc

データは次のようになります。

ID  RegistrantID EmployeeID UserID CompanyID VacancyID Action ActionDate
1793    16295   15  16321   3   NULL       4    2013-08-04 16:45:40.457
1792    16292   15  16321   3   NULL       4    2013-08-04 16:45:33.003
1791    NULL    15  16321   3   NULL       3    2013-08-04 16:45:23.660
1790    16295   9   16289   3   NULL       4    2013-08-04 16:45:09.543
1789    16295   9   16289   3   NULL       4    2013-08-04 16:45:00.817
1799    16295   15  16321   3   NULL       4    2012-08-04 16:45:40.457
1797    16292   15  16321   3   NULL       4    2012-08-04 16:45:33.003
1796    NULL    15  16321   3   NULL       3    2012-08-04 16:45:23.660
1795    16295   9   16289   3   NULL       4    2012-08-04 16:45:09.543
1794    16295   9   16289   3   NULL       4    2012-08-04 16:45:00.817

1 年で登録 ID レコード (最初のもの) に異なるビューを選択したいと考えています。登録者が年に 10 回閲覧された場合、最初に閲覧されたときのみ表示されます。ある従業員が 2 年間で 10 回閲覧した場合は、最初に閲覧されたものとして表示されます。同じ会社の2人の従業員が1年間に10回閲覧した場合、初回閲覧の記録が表示されます。2 つの異なる会社の 2 人の従業員が 1 年間に 10 回見た場合、2 つの会社の最初のレコードが表示されます。group by または何を使用する必要がありますか?

4

1 に答える 1

1

でランキング関数 ROW_NUMBERを使用しPARTITION BY RegistrantID ORDER BY ActionDateて、それぞれの最初の日付を取得しますRegistrantID

WITH CTE AS 
(
   SELECT *,
     ROW_NUMBER() OVER(PARTITION BY RegistrantID
                       ORDER BY ActionDate) AS RN
   FROM [Hrge].[dbo].[hr_ActionLog]
   WHERE action = 4
     AND CompanyID = 3
)
SELECT [ID]
      ,[RegistrantID]
      ,[EmployeeID]
      ,[UserID]
      ,[CompanyID]
      ,[VacancyID]
      ,[Action]
      ,[ActionDate]
FROM CTE
WHERE RN = 1;
于 2013-08-04T12:03:44.113 に答える