簡體   English   中英

選擇SQL Server中每位員工的前5條記錄

[英]Select Top 5 records of every employee in SQL Server

我遇到以下問題,此查詢選擇了為雇員創建的最新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中完成。

謝謝您的幫助...

在通知您使用SQL Server 2000之前,我已回答,因此您無法利用ROW_NUMBER 但是,此MS Knowledgebase文章提供了如何人為地對行進行排名的示例。

排名生效后,請在內聯視圖中使用查詢:

SELECT x.*
  FROM (SELECT p.value,
               ... 'rank'
          FROM EMPLOYEE_LOAN_MOVEMENTS p) x
 WHERE x.rank <= 5

不在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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM