SQL:为每个不同的值选择三行

Don*_*n P 4 sql select timestamp where

对于每个不同的名称,我想选择具有最早时间戳(或 UNIXTIME 中的最小数字)的前三行。什么是正确的查询?

起始表:

Name         Log-in Time
--------     -----------------
Don          05:30:00
Don          05:35:32
Don          07:12:43
Don          09:52:23
Don          05:32:43
James        03:30:00
James        03:54:23
James        09:51:54
James        14:43:34
James        43:22:11
James        59:43:33
James        20:12:11
Mindy        05:32:22
Mindy        15:14:44
Caroline     10:02:22
Rebecca      20:43:32
Run Code Online (Sandbox Code Playgroud)

茶几:

Name         Log-in Time
--------     -----------------
Don          05:30:00
Don          05:35:32
Don          07:12:43
James        03:30:00
James        03:54:23
James        09:51:54
Mindy        05:32:22
Mindy        15:14:44
Caroline     10:02:22
Rebecca      20:43:32
Run Code Online (Sandbox Code Playgroud)

Aus*_*hin 5

WITH Table (Name, LoginTime, Row) AS
(
    SELECT 
       Name,
       LoginTime,
       ROW_NUMBER() OVER (PARTITION BY Name ORDER BY LoginTime)
    FROM SomeTable
)
SELECT 
   Name,
   LoginTime
FROM Table
WHERE 
   Row <= 3
Run Code Online (Sandbox Code Playgroud)

  • @Muthukumar:实际上,CTE 是在 SQL Server **2005** 中引入的 - 但它们也可以在其他 RDBMS 中使用(它**不是 ** Microsoft 特定的扩展,而是最新的 ANSI/ISO SQL 的一部分标准) (2认同)