Sql 如何使用max(datetime)aggreate从中取回工资?
简单表格:Sql 如何使用max(datetime)aggreate从中取回工资?,sql,sql-server-2008,Sql,Sql Server 2008,简单表格: create table [dbo].[payraisehistory] ( [id][int] not null, [payrate][money] not null, [empid][int] not null ) //查询以返回上次工资率提升 select prh.empid, max(prh.dategrant) from payraisehistory prh group by prh.empid empid (No column name
create table [dbo].[payraisehistory]
(
[id][int] not null,
[payrate][money] not null,
[empid][int] not null
)
//查询以返回上次工资率提升
select prh.empid, max(prh.dategrant)
from payraisehistory prh
group by prh.empid
empid (No column name)
2 2013-07-30 00:00:00.000
3 2013-07-30 00:00:00.000
我怎样才能得到回报,以及…当我添加什么样的工资率是我得到了所有行,而不是最新的工资率(每最高(dategrant)
我希望在不使用嵌套查询的情况下执行此操作。group by缺少什么
select prh.empid, prh.payrate, max(prh.dategrant)
from payraisehistory prh
group by prh.empid, payrate
empid payrate (No column name)
2 20.00 2013-04-30 00:00:00.000
2 30.00 2013-05-30 00:00:00.000
2 40.00 2013-06-30 00:00:00.000
2 50.00 2013-07-30 00:00:00.000
3 100.00 2013-04-30 00:00:00.000
3 120.00 2013-07-30 00:00:00.000
您可以使用子查询中的
MAX
聚合将表连接到自身:
select p.empid, p.payrate, p.dategrant
from payraisehistory p
join (
select prh.empid, max(prh.dategrant) maxdategrant
from payraisehistory prh
group by prh.empid
) p2 on p.empid = p2.empid and p.dategrant = p2.maxdategrant
您可以使用子查询中的
MAX
聚合将表连接到自身:
select p.empid, p.payrate, p.dategrant
from payraisehistory p
join (
select prh.empid, max(prh.dategrant) maxdategrant
from payraisehistory prh
group by prh.empid
) p2 on p.empid = p2.empid and p.dategrant = p2.maxdategrant
运行max(payrate)可能会从不同于max(dategrant)的记录中获得支付率。您需要获取上一个日期的记录id,并在子查询中从该记录中提取支付率。运行max(payrate)可能会从不同于max(dategrant)的记录中获得支付率。您需要获取上一个日期的记录id,并在子查询中从该记录中提取工资率。在这种情况下,您需要使用
行编号()
您的查询是:
select prh.empid, prh.payrate, max(prh.dategrant)
from payraisehistory prh
group by prh.empid, payrate;
这是通过empid
和payrate
进行聚合。它们似乎唯一地定义了表中的行,因此您可以将所有行都取回。我认为payrate可以重复,但您的数据没有这样的实例。这是您希望使用row_number()
的情况:
您的查询是:
select prh.empid, prh.payrate, max(prh.dategrant)
from payraisehistory prh
group by prh.empid, payrate;
这是通过empid
和payrate
聚合的。它们似乎唯一地定义了表中的行,因此您可以将所有行都取回。我想可以重复一个payrate,但您的数据没有这样的实例。双扫描表!SQL SERVER 2005中出现了OVER子句机会。@realmumber3012--完全正确同意--使用排名函数
将是此RDBMS的更好解决方案。双扫描表!SQL SERVER 2005中出现了OVER子句机会。@realnumber3012--完全同意--使用排名函数
将是此RDBMS的更好解决方案。