我是使用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
这将返回列出的所有员工列表,其中列出了8/30/2013,这是最后一次有人获得报酬但不是每个人。我在Max功能上做错了什么?我尝试了很多不同的方法而没有运气,一定要错过这里明显的东西!
答案 0 :(得分: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
另请注意,评论指出,使用更具描述性的表名,因为这将在以后大大提高可保性。
答案 1 :(得分:0)
尝试更改此行:
(Select distinct MAX (table2.PayDate) from table2) as Last_Paycheck
对于这样的事情:
MAX (table2.PayDate) OVER (PARTITON BY table2.UniqueID) as Last_Paycheck
不需要Select
- 您已经说明了加入条款中所需的关联。
希望这可以解决问题......
答案 2 :(得分: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