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 回答