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

symb ごとの最大株主数の symb と価格を取得しようとしています。たとえば、価格が $60.62 の ASN の行は 1 つだけです。

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;

これは、この種の問題で私が使用するトリックです: に対応する行を表示i1i2[SYMB]ください[Shareholder]。つまり、より大きな値を持つ行が[Shareholder]存在しない場合i1は、最大値を持つ必要があります。

このクエリは、 の[Shareholder]個別の値ごとに最大値が同数の場合に複数の行を返します[SYMB]が、このスレッドで他の人が与えた他のほとんどの回答にも同じことが当てはまります。これを解決するには、テーブルの一意の列を使用して結合に別の条件を追加する必要があります。

于 2009-02-08T20:39:34.907 に答える
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 * 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 に答える