T - SQL高级SELECT语句

时间:2014-08-09 08:52:12

标签: sql sql-server select

我有这张桌子:

   Date |    TV Show  |    Begin   |    End  |
===================================================
12/3/14 |GameofThrones|   11:00    |   11:55 |
12/3/14 | Breaking Bad|   12:00    |   12:45 |
12/3/14 |   Scrubs    |   12:46    |   13:15 |
12/3/14 |   Scrubs    |   13:16    |   13:59 |
12/3/14 | Breaking Bad|   14:00    |   15:00 |
12/2/14 | Breaking Bad |  15:00    |   16:00 |
12/3/14 |GameofThrones|   17:00    |   18:00 |
12/3/14 |GameofThrones|   18:00    |   19:00 |
12/3/14 |   Scrubs    |   19:00    |   20:00 |

好吧......我的问题是:如何只选择任何给定电视节目的第一个和第二个条目?

示例:

12/3/14 | Breaking Bad|   12:00    |   12:45 |
12/3/14 | Breaking Bad|   14:00    |   15:00 |

我不知道。

2 个答案:

答案 0 :(得分:2)

仅限一个电视节目,请使用TOP关键字来限制结果数量。您可以使用ORDER BY子句对条目进行排序,使用WHERE子句来过滤结果集。

对于所有电视节目,您可以使用Common Table Expression。 当然,您可以使用任何WHERE条件来过滤内部查询的结果集。

WITH cte (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY [TV Show] ORDER BY [Date] ASC, [Begin] ASC) AS RowNum
    [Date], [TV Show], [Begin], [End]
  FROM
    TVShows
)
SELECT
  [Date], [TV Show], [Begin], [End]
FROM
  cte
WHERE
  RowNum < 3

答案 1 :(得分:0)

您正在寻找的是

SELECT TOP 2 *
FROM TVSHOWS
WHERE [TV SHOW] = 'Game of Thrones'
ORDER BY [DATE]

您可能希望按查询排序或分组以过滤您的需求,但TOP N完全符合您的要求。