0

我有以下问题,我有这个查询选择为员工创建的最新 5 条记录:

SELECT TOP 5
       p.value,
       p.record_date AS FECHA
FROM 
    employee_loan_movements p
WHERE
     p.employee_code = '1'
     AND p.record_date <= '2009-11-11'
     AND p.movement_type = 1
     AND p.value > 0
ORDER BY p.record_date DESC

现在我需要构建一个查询来选择loan_movements表中每个员工的前5名,我知道我可以通过选择rownum和rownum <= 5在Oracle中做到这一点,但我无法找到一种方法来做到这一点或其他东西否则在 SQL Server 2000 中具有相同的结果。

我想我可以使用一个函数,但我想先知道它是否可以用纯 SQL 完成。

谢谢您的帮助...

4

2 回答 2

2

在注意到您使用的是 SQL Server 2000 之前,我已回答,因此您无法利用ROW_NUMBER。但是,这篇MS 知识库文章给出了如何人为地对行进行排名的示例。

一旦你的排名工作,在内联视图中使用查询:

SELECT x.*
  FROM (SELECT p.value,
               ... 'rank'
          FROM EMPLOYEE_LOAN_MOVEMENTS p) x
 WHERE x.rank <= 5
于 2009-11-12T16:52:12.540 回答
2

不在 SQL 2000 中,您不能这样做。但是,在 SQL 2005/8 中,您可以:

WITH foo(eid) as (select distinct employee_code from employee_loan_movements)
SELECT * FROM foo
CROSS APPLY (
    SELECT TOP 5
        p.value,
        p.record_date AS FECHA
    FROM 
    employee_loan_movements p
    WHERE
      p.employee_code = foo.employee_code
      AND p.record_date <= '2009-11-11'
      AND p.movement_type = 1
      AND p.value > 0
      ORDER BY p.record_date DESC
)
于 2009-11-12T17:01:00.853 回答