1

従業員テーブルと1対多の関係を持つleave_allocationテーブルがあります。各従業員には、一定期間にわたって多数の休暇割り当てがあります。各従業員の最新の割り当てを取得したいと思います。

クエリを試しましたが、日付と日の値が同じ行に相関していません

select e.employee_number, e.nme, MAX(l.date), l.days 
from employee e, leave_allocation l 
where l.employee_id = e.employee_id
group by e.employee_number, e.nme

従業員ごとの最新の割り当てを取得するにはどうすればよいですか?

4

3 に答える 3

2
SELECT e.employee_number
      ,e.nme
      ,l.days
  FROM employee e
      , leave_allocation l
      ,(SELECT employee_id
              ,MAX(DATE) date
          FROM leave_allocation
         GROUP BY employee_id) m
 WHERE l.employee_id = e.employee_id
   AND l.employee_id = m.employee_id
   AND l.date = m.date

同じemployee_numberとdateを持つ複数の行が存在する可能性がある場合は、合計する必要があります。

SELECT e.employee_number
      ,e.nme
      ,sum(l.days)
  FROM employee e
      , leave_allocation l
      ,(SELECT employee_id
              ,MAX(DATE) date
          FROM leave_allocation
         GROUP BY employee_id) m
 WHERE l.employee_id = e.employee_id
   AND l.employee_id = m.employee_id
   AND l.date = m.date
GROUP BY e.employee_number
        ,e.nme
于 2012-08-30T16:45:57.180 に答える
1

MAX()サブクエリに日付を配置します。

SELECT e.employee_number, e.nme, l.leavedate, la.days
FROM employee e
INNER JOIN
(
   SELECT Max(date) leavedate, employee_id
   FROM leave_allocation
   GROUP BY employee_id
) l
   ON e.employee_id = l.employee_id
INNER JOIN leave_allocation la
   ON l.employee_id = la.employee_id
   AND l.leavedate = la.date

また、テーブル間のコンマの代わりにANSI結合構文を使用するようにクエリを切り替えました。

于 2012-08-30T16:48:07.597 に答える
1

これを試してみてください

SELECT  e.employee_number, e.nme, c.maxDate, l.days 
FROM    employee e 
            INNER JOIN leave_allocation l
                ON l.employee_id = e.employee_id
            INNER JOIN
            (
                select employee_id, MAX(date) maxDate
                from    leave_allocation  
                group by employee_id
            ) c ON c.employee_id = l.employee_ID AND
                    c.maxDate = l.date
于 2012-08-30T16:48:50.053 に答える