简体   繁体   English

SELECT行值WHERE MAX()是GROUP BY查询中的列值

[英]SELECT Row Values WHERE MAX() is Column Value In GROUP BY Query

How can I select like this? 我该如何选择? Can I create a User defined Aggregate Function 我可以创建用户定义的汇总函数吗

SELECT Max(A),(SELECT TOP 1 FROM TheGroup Where B=Max(A)) FROM MyTable SELECT Max(A),(SELECT TOP 1 FROM TheGroup Where B=Max(A))从MyTable中SELECT Max(A),(SELECT TOP 1 FROM TheGroup Where B=Max(A))

where MyTable as Shown Below MyTable如下所示

    A  B  C
--------------
    1  2  S
    3  4  S
    4  5  T
    6  7  T

I want a Query Like this 我想要这样的查询

SELECT MAX(A),(B Where A=Max(A)),C FROM MYTable GROUP BY C

I'm Expecting the result as below 我期待如下结果

 MAX(A)  Condition    C
-----------------------
   3        4         S
   6        7         T
 SELECT A,B,C FROM
     (SELECT *, ROW_NUMBER() OVER (PARTITION BY C ORDER BY A DESC) RN FROM MyTable)
 WHERE RN = 1

(this query will always return only one row per C value) (此查询始终每个C值仅返回一行)

OR 要么

WITH CTE_Group AS 
(
    SELECT C, MAX(A) AS MaxA
    FROM MyTable
    GROUP BY C
)
SELECT g.MaxA, t.B, g.C
FROM MyTable t
INNER JOIN CTE_Group g ON t.A = g.MaxA AND t.C = g.C

(if there are multiple rows that have same Max(A) value - this query will return all of them) (如果有多个行具有相同的Max(A)值-此查询将返回所有这些行)

SELECT Max(A)
FROM MyTable
Where B=(SELECT Max(A) FROM MyTable) 

update: 更新:

SELECT *
FROM MyTable
Where B=(SELECT Max(A) FROM MyTable) 

update 2: 更新2:

SELECT DISTINCT A, B
FROM MyTable
Where A=(SELECT Max(A) FROM MyTable GROUP BY C) 

update 3: 更新3:

ok, I think I understand what you're looking for now.. How about this: 好的,我想我知道您现在要寻找的是什么。

SELECT *
FROM MyTable
Where A in (SELECT Max(A) FROM MyTable GROUP BY C) 
SELECT t1.*
FROM YourTable t1 
Left Outer Join YourTable t2 on t1.C=t2.C AND t1.A < t2.A
WHERE t2.A is null
WITH
  cte AS
(
  SELECT 
    ROW_NUMBER() OVER (ORDER BY cola desc) AS Rno,
    *
  FROM
    tbl
)
SELECT top 1
cola,colb
FROM
  cte
order by Rno

Then try it: 然后尝试:

    WITH
  cte AS
(
  SELECT 
    ROW_NUMBER() OVER (PARTITION BY col3 ORDER BY col1 desc) AS Rno,
    *
  FROM
    tbl

)
SELECT 
col1,col2,col3
FROM
  cte
WHERE Rno=1

how about this: 这个怎么样:

    SELECT *
    FROM MyTable    
    WHERE A IN (SELECT MAX(A) FROM MyTable GROUP BY C)

Try Following Query : 尝试以下查询:

SELECT TABLE1.A , TABLE2.B , TABLE1.C
FROM 
(
    SELECT MAX(A) AS A,C 
    FROM MYTable 
    GROUP BY C
) AS TABLE1 
INNER JOIN
(
SELECT *
FROM MYTable
) AS TABLE2 ON TABLE1.A = TABLE2.A

SQLFIDDLE SQLFIDDLE

you can do it by simple join query . 您可以通过简单的连接查询来做到这一点。 join query always run faster then In query . 连接查询总是比输入查询运行得更快。 Join query run only one time at the time of execution of the query . 连接查询在执行查询时仅运行一次。 we can archive same result by using IN query . 我们可以使用IN查询来归档相同的结果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM