0

人:

Id  Name
1   Anton
2   Ib
3   Knud
4   Hans

登録:

Id  PersonId    Status  DateTime        Department
5   1           1       11-1-2013 10:00 1
6   1           0       10-1-2013 09:00 1
7   1           2       10-1-2013 14:05 1
8   1           2       09-1-2013 09:00 1
9   2           2       09-1-2013 09:00 2
10  3           2       09-1-2013 09:00 3
11  4           2       10-1-2013 17:00 1

部門1の当日(2013年10月1日)の最新の登録(個人別)を選択する必要があります

期待される出力:

Name    R.Id    P.Id    Status  DateTime        Department

Anton   7       1       2       10-1-2013 14:05 1
Hans    11      4       2       10-1-2013 17:00 1
4

1 に答える 1

2

私はあなたがこれを望んでいると思います:

select top 1 p.name, r.id, p.id, r.status, r.datetime, r.department
from registration r join
     person p
     on r.personid = p.personid
where department = 1 and cast(daTetime as date) = '10-1-2013'
order by datetime desc

個人ではなく、部門による最新の登録。これは、where句を使用して日と部門でフィルタリングし、datetime列で順序付けて、最初のものを選択するだけです。

それらすべてを取得するには:

select p.name, r.id, p.id, r.status, r.datetime, r.department
from (select r.*, row_number() over (partition by person order by datetime desc) as seqnum
      from registration r
      where department = 1 and cast(daTetime as date) = '10-1-2013'
     ) r join
     person p
     on r.personid = p.personid
where seqnum = 1
order by datetime desc
于 2013-02-11T19:31:23.913 に答える