1

私は SQL を使用するのに非常に慣れていないため、最初のクエリ/レポートを作成しようとしていますが、これについて何らかの助けが得られることを望んでいました (これはそのための場所のようです!)。基本的に私が作成したいのは、従業員または請負業者が最後にいつ支払われたかを示すレポートです。このすべての情報を含むデータベースがあります。最後の支払い日を含むすべての人の個別のリストを返したいだけです。最終的に得られるのは、私たちが行ったすべての支払いのリスト(Person1は各支払い日で20回以上リストに載っています)、またはその人だけでなく、すべての人と最新の支払い日のリストのいずれかです。これが私がこれまでに持っているものです:

SELECT  table1.Office ,
    table1.EE_No ,
    table1.Name ,
    table1.Code ,
    table1.Freq ,
    ( SELECT DISTINCT
                MAX(table2.PayDate)
      FROM      table2
    ) AS Last_Paycheck
FROM    table1
    INNER JOIN table2 ON table1.UniqueID = table2.UniqueID
WHERE   table1.EndDate IS NULL

これが返すのは、2013 年 8 月 30 日がリストされているすべての従業員のリストです。ここでMax関数で何が間違っていますか? 私はさまざまな方法を試しましたが、運がありません。ここで明らかな何かが欠けているに違いありません!

4

3 に答える 3

0

次のようなものを試す必要があります

Select table1.Office, 
table1.EE_No, 
table1.Name, 
table1.Code, 
table1.Freq, 
(Select distinct MAX (table2.PayDate) 
from table2
where table1.UniqueID = table2.UniqueID
) as Last_Paycheck

from
table1 on 
where 
table1.EndDate is null

他の方法は次のようなものになります

Select table1.Office, 
table1.EE_No, 
table1.Name, 
table1.Code, 
table1.Freq, 
MAX (table2.PayDate) as Last_Paycheck

from
table1 inner join
table2
on table1.UniqueID = table2.UniqueID
where 
table1.EndDate is null
GROUP BY table1.Office, 
table1.EE_No, 
table1.Name, 
table1.Code, 
table1.Freq

また、コメントに記載されているように、よりわかりやすいテーブル名を使用してください。これにより、後で保守性が大幅に向上します。

于 2013-09-04T19:21:24.393 に答える
0

この行を変更してみてください:

(Select distinct MAX (table2.PayDate) from table2) as Last_Paycheck

このようなものに:

MAX (table2.PayDate) OVER (PARTITON BY table2.UniqueID) as Last_Paycheck

必要なしSelect- join 句で必要な関連付けを既に指定しています。

これがうまくいくことを願っています...

于 2013-09-04T19:23:01.273 に答える
0

グループ化を使用する:

Select table1.Office, 
table1.EE_No, 
table1.Name, 
table1.Code, 
table1.Freq, 
MAX (table2.PayDate) as Last_Paycheck
from table1 
inner join table2
on table1.UniqueID = table2.UniqueID
where table1.EndDate is null
group by table1.Office, 
table1.EE_No, 
table1.Name, 
table1.Code, 
table1.Freq
于 2013-09-04T19:23:03.173 に答える