English 中文(简体)
Select Top 5 records of every employee in SQL Server
原标题:

I have the following issue, I have this query that select the latest 5 records created for an employee:

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

Now i need to build a query to select the top 5 of every employee in the loan_movements table, I know i can do it in Oracle by selecting selecting rownum and rownum <= 5 but I cant manage to find a way to do that or something else with the same result in SQL Server 2000.

I guess I could use a function but I want to know first if it can be done in plain SQL.

Thanks for the help...

问题回答

I answered before noticing you re on SQL Server 2000, so you couldn t take advantage of ROW_NUMBER. However, this MS Knowledgebase article gives examples how to artificially rank rows.

Once you have the ranking working, use the query in an inline view:

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

Not in SQL 2000, you can not do that. In SQL 2005/8 however you can:

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
)




相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签