4

テーブル -Employee.Status.XREF

Client  Employee    Date
198     Jon Doe     3/1/2009
198     Jon Doe     1/1/2009

テーブル -Employee.Status.History

Client  Employee    Date        Status
198     Jon Doe     5/21/2009   T   
198     Jon Doe     3/1/2009    A
198     Jon Doe     1/1/2009    P

Employee.Status.HistoryEmployee.Status.XREFwhere ClientEmployee、およびDatematchの両方のレコードのみをクエリします。

Employee.Status.History最大日付 ( by client)のレコードのみを返しますemployee。この場合、返されます

Client  Employee    Date        Status
198     Jon Doe     3/1/2009    A
4

4 に答える 4

4

サブセレクトとグループ化の使用:

select b.*  
from Employee.Status.History b,  
( select client, employee, max(date) date  
  from Employee.Status.XREF  
  group by client, employee  
) a  
where b.client = a.client  
and   b.employee = a.employee  
and   b.date = a.date  

内部クエリは最新の日付を選択します。
外側のクエリは、関連付けられたクライアントと従業員のその日付のレコード全体を返します。

于 2009-08-14T21:39:09.857 に答える
1

これはうまくいくはずです:

SELECT h.*
FROM Employee.Status.History h
INNER JOIN (
    SELECT h.Client, MAX(h.Date) AS MaxDate
    FROM Employee.Status.History h
    INNER JOIN Employee.Status.XREF x ON h.Client = x.Client 
         AND h.Employee = x.Employee AND h.Date = x.Date
) q ON h.Client = q.Client
于 2009-08-15T00:35:34.667 に答える
0

MySql:

SELECT b.* FROM tableXREF a, tableSTATUS b
WHERE b.client = a.client
ORDER BY b.Date DESC
LIMIT 1

MSSQL:

SELECT TOP(1) b.field1, b.field2 etc. FROM tableXREF a, tableSTATUS b
WHERE b.client = a.client
ORDER BY b.Date DESC

私は推測する ...

于 2009-08-14T21:31:16.470 に答える
-1

group by 句で結合を使用しないのはなぜですか?

select h.client,h.employee,max(h.date),h.Status
from Employee.Status.History h inner join Employee.Status.XREF x on
h.client=x.client and
h.employee=x.employee and
h.date=x.date
group by h.client,h.employee,h.Status
于 2009-08-15T00:26:51.773 に答える