来自数据集的SQL最后时间戳

来自数据集的SQL最后时间戳,sql,timestamp,Sql,Timestamp,我在获取数据库中每个nr的最后一个时间戳时遇到问题 +--------+---------------------+------------------------------+ | nr | type | ts | +--------+---------------------+------------------------------+ | | |

我在获取数据库中每个nr的最后一个时间戳时遇到问题

+--------+---------------------+------------------------------+
|  nr    |        type         |              ts              |
+--------+---------------------+------------------------------+
|        |                     |                              |
|  1002  |          RSC        |  2017-12-05 07:53:42         |
|  1002  |          RSC        |  2017-12-05 07:52:42         |
|  1004  |          RSC        |  2017-12-05 07:54:42         |
|  1004  |          RSC        |  2017-12-05 07:51:42         |
|  1004  |          RSC        |  2017-12-05 07:51:42         |
+--------+---------------------+------------------------------+ 
选择后的结果:

+-------+---------------------+-------------------------+
| 1002  |           RSC       |  2017-12-05 07:53:42    |
+-------+---------------------+-------------------------+
| 1004  |          RSC        |  2017-12-05 07:54:42    |
+-------+---------------------+-------------------------+

谢谢您的帮助。

您可以在此处使用
行号

SELECT nr, type, ts
FROM
(
    SELECT nr, type, ts,
        ROW_NUMBER() OVER (PARTITION BY nr ORDER BY ts DESC) rn
    FROM yourTable
) t
WHERE t.rn = 1;
如果您的SQL版本没有分析函数,那么我们也可以加入子查询以获得相同的结果:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT nr, MAX(ts) AS max_ts
    FROM yourTable
    GROUP BY nr
) t2
    ON t1.nr = t2.nr AND
       t1.ts = t2.max_ts;

您可以在此处使用
ROW\u NUMBER

SELECT nr, type, ts
FROM
(
    SELECT nr, type, ts,
        ROW_NUMBER() OVER (PARTITION BY nr ORDER BY ts DESC) rn
    FROM yourTable
) t
WHERE t.rn = 1;
如果您的SQL版本没有分析函数,那么我们也可以加入子查询以获得相同的结果:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT nr, MAX(ts) AS max_ts
    FROM yourTable
    GROUP BY nr
) t2
    ON t1.nr = t2.nr AND
       t1.ts = t2.max_ts;

您还可以使用“分组依据”:

SELECT nr, type, MAX(ts) FROM TABLE
group by nr, type

您还可以使用“分组依据”:

SELECT nr, type, MAX(ts) FROM TABLE
group by nr, type

在某种意义上,如果时间戳决定顺序,则需要按nr分组,然后在时间戳上使用min或max。否则,您将研究更复杂的问题,如以下答案: 实际语法根据数据库的不同而有所不同,但第一个答案在普通的ANSI SQL中是正确的

SELECT nr, type, MAX(ts) FROM t
GROUP BY nr, type

在某种意义上,如果时间戳决定顺序,则需要按nr分组,然后在时间戳上使用min或max。否则,您将研究更复杂的问题,如以下答案: 实际语法根据数据库的不同而有所不同,但第一个答案在普通的ANSI SQL中是正确的

SELECT nr, type, MAX(ts) FROM t
GROUP BY nr, type

以下是我在评论中提出的解决方案:

SELECT
    nr
    ,type
    ,MAX(ts) AS [Last Timestamp]
FROM <your_table>
GROUP BY nr, type
选择
天然橡胶
,类型
,最大值(ts)为[最后时间戳]
从…起
按nr、类型分组

此链接将帮助您更好地理解
GROUP BY
子句和聚合函数。

以下是我在评论中建议的解决方案:

SELECT
    nr
    ,type
    ,MAX(ts) AS [Last Timestamp]
FROM <your_table>
GROUP BY nr, type
选择
天然橡胶
,类型
,最大值(ts)为[最后时间戳]
从…起
按nr、类型分组

此链接将帮助您更好地理解
groupby
子句和聚合函数。

只需使用
groupby
MAX
只需使用
groupby
MAX