mysql - 如何在某一列具有相同值的行中查询具有最高列值的行 v.2

标签 mysql sql-server

这里仍然是 SQL 熟练工。我有一个名为 #everything 的临时表,其中包含以下数据。 (标题缩写)。临时表的列数比这个多得多。

hh_key sub_id tier
   1    1234   T1
   2    2345   T2
   3    4567   T4
   3    4568   T3

我想返回具有“最佳”层的行。就我而言,“最好”在“T”之后具有最小的数字。这是我想要的结果:

hh_key sub_id tier
   1    1234   T1
   2    2345   T2
   3    4568   T3

我知道这个确切的问题在这里被提出并解决:previous question 但答案中提供的语法对我不起作用。所有记录都会返回,而不仅仅是具有所需值的记录。

这将是我之前答案的版本,它不会返回值的子集。一切都已返回。

Select household_key, sm_subscription_id ,mytier
from #everything
where Mytier is not null
and Mytier IN (select MIN(mytier) from #everything group by household_key)
order by household_key

我拥有的表中所要求的列数多于这 3 列,这可能是一个因素吗?

最佳答案

您可以使用ROW_NUMER():

SUBSTRING(tier, 2, LEN(tier) - 1) 将提取 'T' 之后的数字。您可以使用提取的字符串并将其CAST 转换为INT 并在ROW_NUMBERORDER BY 子句中使用它.

SQL Fiddle

WITH Cte AS(
    SELECT *,
        rn = ROW_NUMBER() OVER(
            PARTITION BY hh_key
            ORDER BY CAST(SUBSTRING(tier, 2, LEN(tier) - 1) AS INT)
        )
    FROM #everything
)
SELECT
    hh_key, sub_id, tier
FROM Cte
WHERE rn = 1
DROP TABLE #everything

关于mysql - 如何在某一列具有相同值的行中查询具有最高列值的行 v.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027789/

相关文章:

SQL Server - 查询短路?

SQL - 如何检索一列中排名最高的行,而另一列中具有多个重复行

sql - 为什么 SQL Server 会改变操作顺序和装箱方式?

mysql - 更改MySQL读取的日期格式

java - 针对这种情况如何设计数据库?

MYSQL - 比较 2 个数组

Mysql 查询最新之前日期或(如果为空则)首先之后

MySQL 错误 #1071 - 指定的键太长;最大 key 长度为 767 字节

sql - T-SQL 转换与转换

c# - 如何加速此 C# 函数/SQL 插入?