tsql - 使用 T-SQL 根据一列获取不同的行
问题描述
我有以下格式的列:
Time Value
17:27 2
17:27 3
我想根据一列获得不同的行:时间。所以我的预期结果将是一个结果。17:27 3 或 17:27 3。
清楚的
T-SQL 在多列而不是一列上使用 distinct。Distinct 将返回两行,因为 Time 和 Value 的组合是唯一的(见下文)。
select distinct [Time], * from SAPQMDATA
会回来
Time Value
17:27 2
17:27 3
代替
Time Value
17:27 2
通过...分组
分组方式似乎也不起作用
select * from table group by [Time]
将导致:
Column 'Value' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
问题
如何在不考虑选择查询中提供的其他列的情况下选择所有唯一的“时间”列?
如何删除重复条目?
解决方案
这就是ROW_NUMBER将成为您最好的朋友的地方。使用它作为您的样本数据...
time value
-------------------- -----------
17:27 2
17:27 3
11:36 9
15:14 5
15:14 6
.. 以下是您可以复制/粘贴/运行的两种解决方案。
DECLARE @youtable TABLE ([time] VARCHAR(20), [value] INT);
INSERT @youtable VALUES ('17:27',2),('17:27',3),('11:36',9),('15:14',5),('15:14',6);
-- The most elegant way solve this
SELECT TOP (1) WITH TIES t.[time], t.[value]
FROM @youtable AS t
ORDER BY ROW_NUMBER() OVER (PARTITION BY t.[time] ORDER BY (SELECT NULL));
-- A more efficient way solve this
SELECT t.[time], t.[value]
FROM
(
SELECT t.[time], t.[value], ROW_NUMBER() OVER (PARTITION BY t.[time] ORDER BY (SELECT NULL)) AS RN
FROM @youtable AS t
) AS t
WHERE t.RN = 1;
每个返回:
time value
-------------------- -----------
11:36 9
15:14 5
17:27 2
推荐阅读
- python - 由 AVX 实现的 Python 的任何 LogSumExp?
- react-native - 如何让我的 React Native Flatlist 重新加载领域数据更新?
- sql-server - 过滤引用中间的特定字符 - TSQL
- ios - 构建 Xcode 时归档失败但成功
- c++ - 使用 string::pop_back() 编译错误
- javascript - PHP if 语句触发 Confirm() 弹出窗口,无论选择如何都返回 true
- reactjs - 无法重定向到 Reactjs V16.xx 中的其他页面
- c# - 错误的命名空间生成xmlns c#
- javascript - 从数组数组中删除元素
- concurrency - 埃菲尔并发垃圾回收