我知道如何在 SQL Server 中执行此操作,但 Postgres 不同。
我想退还最高员工工资。
Select b.enumber, b.bday,
case when Max(c.id) then c.pay
ELSE c.pay
End As "Current Pay"
From employee b
inner join humanr c
on b.empid = c.empid
这会产生一个错误:
错误:CASE/WHEN 的参数必须是布尔类型,而不是整数类型
我怎样才能从那里退回工资max(id)
?
表humanr
数据结构为id
、employeeid
、date
和pay
。此表将包含每位员工的小时工资,基于employeeid
. 对于employee
表中的每个员工,我想从那里退还工资,MAX(id)
以便为员工退还当前工资。
例子:
1 1234 01/01/2016 8.00
2 1234 04/04/2016 10.00
3 5555 05/01/2016 12.00
4 1234 05/16/2016 10.50
所以对于5555我想要12.00返回,对于1234我想要10.50。
有很多方法可以做到这一点。许多都可以在 SQL Server 和 Postgres 中工作,例如使用以下
ROW_NUMBER()
函数:顺便说一句,如果你想要最新的工资,为什么
ORDER BY id DESC
应该使用而不是ORDER BY c.date DESC
?这会更有意义。另一种专有的 Postgres 方法是使用
DISTINCT ON
:另一种需要最新版本(9.3+)的通常更有效的方法是使用
LATERAL
语法(类似于CROSS/OUTER APPLY
SQL Server):哪种技术更有效取决于数据分布。请参阅此基准。
您应该从 c.pay 获得最大值,然后: