我对SQL还是很陌生。
我有一个MS SQL DB,我想在其中获取日期时间在特定输入上方的前3行,再加上所有datetime值等于上一次获取的最后一行的行。
| rowId | Timestamp | data |
|-------|--------------------------|------|
| rsg | 2019-01-01T00:00:00.000Z | 120 |
| zqd | 2020-01-01T00:00:00.000Z | 36 |
| ylp | 2020-01-01T00:00:00.000Z | 48 |
| abt | 2022-01-01T00:00:00.000Z | 53 |
| zio | 2022-01-01T00:00:00.000Z | 12 |
这是我当前的请求,要提取3行。
SELECT
TOP 3 *
FROM
Table
WHERE
Timestamp >= '2020-01-01T00:00:00.000Z'
ORDER BY
Timestamp ASC
在这里,我想在一个请求中获得最后4行。
感谢您的帮助
答案 0 :(得分:2)
一种可能性,使用ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY Timestamp) rn
FROM yourTable
)
SELECT *
FROM cte
WHERE
Timestamp <= (SELECT Timestamp FROM cte WHERE rn = 3);
匹配记录应该在前3行中,或者应该具有与第三行中的时间戳相等的时间戳。我们可以通过将时间戳限制为等于或小于第三行中的时间戳来组合这些条件。
或者可以使用TOP 3 WITH TIES
:
SELECT TOP 3 WITH TIES *
FROM yourTable
ORDER BY Timestamp;