2
SELECT tblIssue.SYMB, tblIssue.[PRCE], tblIssue.[Shareholder]
FROM tblIssue

我正在尝试为每个 symb 的最大股东数量拉取 symb 和价格。例如,我将只有 1 行 ASN 价格为 60.62 美元。

SYMB价格股东
ASN $0.00 0
ASN 0.00 美元 51
ASN $25.18 0
ASN $25.26 0
ASN $36.00 0
ASN 60.62 231 美元
ASNL $0.00 101
ASR $0.00 4
ASR $0.00 24
ASR 37.17 美元 13
4

6 回答 6

3
SELECT i1.*
FROM tblIssue i1
  LEFT OUTER JOIN tblIssue i2
  ON (i1.[SYMB] = i2.[SYMB] AND i1.[Shareholder] < i2.[Shareholder])
WHERE i2.[SYMB] IS NULL;

这是我在解决这类问题时使用的一个技巧:i1当没有其他行i2具有相同[SYMB]和更大的[Shareholder]. 即,如果不存在更大的行[Shareholder],则i1必须具有最大值。

当 的[Shareholder]每个不同值的最高值相同时,此查询将返回多行[SYMB],但对于此线程上其他人给出的大多数其他答案也是如此。要解决此问题,您必须使用表的唯一列向联接添加另一个条件。

于 2009-02-08T20:39:34.907 回答
2

相关子查询似乎是最简单的(如果我理解您的问题):

select symb, price, shareholder
from issue i
where price = ( select max(price) from issue where symb = i.symb)

产生:

ASN 61 231
ASNL 0 101
ASR 37 13
于 2009-02-08T19:00:10.070 回答
1
WITH mx AS (
    SELECT tblIssue.SYMB, MAX(tblIssue.[Shareholder])
    FROM tblIssue
)
SELECT tblIssue.SYMB, tblIssue.[PRCE], tblIssue.[Shareholder]
FROM tblIssue
INNER JOIN mx
    ON mx.SYMB = tblIssue.SYMB
    AND mx.[Shareholder] = tblIssue.[Shareholder]

这应该产生:

SYMB    Price   Shareholder
ASN $60.62  231
ASNL    $0.00   101
ASR $0.00   24

如果这就是你要找的。

于 2009-02-08T18:35:59.417 回答
0

在甲骨文中:

SELECT symb, price
FROM (
  SELECT symb, price, ROW_NUMBER() OVER (PARTITION BY symb ORDER BY price DESC) AS rn
  FROM   tblIssue
)
WHERE rn = 1
于 2009-02-08T18:31:29.427 回答
0

那会有所帮助;

Select * From tblIssue t2
Join 
(
Select MAX(t1.Shareholder) shrhldr, t1.symb symb
From tblIssue t1
Group by t1.symb
) tt On tt.shrhldr = t2.Shareholder and tt.symb = t2.symb
于 2009-02-08T18:39:23.980 回答
0

这类似于 Quassnoi 的回答,但更正以得到最大股东的行,这是 OP 所要求的。如果您有多行具有相同数量的最大股东的相同符号,它将随机给您其中之一。如果您想要所有这些,请将 ROW_NUMBER 更改为 RANK。

SELECT symb, price, shareholder
FROM (
  SELECT symb, price, shareholder, ROW_NUMBER() OVER (PARTITION BY symb ORDER BY shareholder DESC) AS rn
  FROM   tblIssue
)
WHERE rn = 1
于 2009-02-08T19:03:36.867 回答