如何通过关闭订单获得明确的用户ID

时间:2021-03-10 14:27:43

标签: sql-server select sql-order-by

我有一个叫做 info 的表,它的数据是这样的,

+----------+-------------------------+------+
| FKUserID |      CompletedTime      | Type |
+----------+-------------------------+------+
| 1        | 2021-03-10 12:56:00.423 | 5    |
+----------+-------------------------+------+
| 245      | 2021-03-10 12:46:46.977 | 5    |
+----------+-------------------------+------+
| 1        | 2021-03-10 12:44:53.683 | 5    |
+----------+-------------------------+------+
| 1        | 2021-03-10 12:40:54.733 | 5    |
+----------+-------------------------+------+
| 1        | 2021-03-10 12:35:26.307 | 5    |
+----------+-------------------------+------+
| 245      | 2021-03-10 11:11:33.887 | 5    |
+----------+-------------------------+------+
| 245      | 2021-03-10 10:18:11.403 | 5    |
+----------+-------------------------+------+

我需要获取不同的用户 ID 数据,以及他们的 CompletedTime 列的最长完成时间

预期输出是,

+----------+-------------------------+------+
| FKUserID |      CompletedTime      | Type |
+----------+-------------------------+------+
| 1        | 2021-03-10 12:56:00.423 | 5    |
+----------+-------------------------+------+
| 245      | 2021-03-10 12:46:46.977 | 5    |
+----------+-------------------------+------+

更新:抱歉,我也需要做这个 Linq 查询

2 个答案:

答案 0 :(得分:0)

对于此类问题,我更喜欢将 ROW_NUMBERTOP 1 WITH TIES 一起使用:

SELECT TOP 1 WITH TIES *
FROM info
ORDER BY ROW_NUMBER() OVER (PARTITION BY FKUserID ORDER BY CompletedTime DESC);

答案 1 :(得分:0)

这是您需要的: https://www.w3schools.com/sql/sql_groupby.asp 按用户 ID 分组并在 CompletedTime 上使用 Max(),您将获得结果。

你的 SQL 看起来像

SELECT `FKUserID`, MAX(`CompletedTime`) from `TableName` GROUP BY `FKUserID`;
相关问题