1

私はこのサンプルテーブルを持っています:

ColA   ColB   ColC
CBCP    25    popx
ABC1    10    ppp1
ABC1    25    ppxx
CBCP    30    xm2x

そこから、これらの列を取得したいと思います

ColA   ColB   ColC
ABC1    25    ppxx
CBCP    30    xm2x

私が望むのは、最大 ColB の行を取得することです。しかし、クエリに ColC を含めようとするとエラーが発生します。

select ColA, max(ColB), ColC
from tblCaseDev
where ColB > getdate() group by ColA

これは私のエラーです..

Msg 8120, Level 16, State 1, Line 1
Column 'tblCaseDev.ColC' is invalid in the
select list because it is not contained in either
an aggregate function or the GROUP BY clause.

誰かが私を助けてくれることを願っています..事前に感謝..

4

4 に答える 4

1

row_number()ウィンドウ関数を使用したい:

select CaseNo, "Date", Remarks
from (select t.*, row_number() over (partition by caseno order by date desc) as seqnum
      from tblCaseDev t
      where date > getdate()
     ) t
where seqnum = 1;

編集:

持っていない場合は、昔ながらの方法でこれを行うことができますrow_number():

select t.*
from tblCaseDev t join
     (select caseno, max(date) as maxdate
      from tblCaseDev 
      group by caseno
     ) tsum
     on t.caseno = tsum.caseno and t.date = tsum.maxdate
于 2013-08-28T01:35:19.180 に答える
1

最初に集計クエリを作成してから、元のテーブルを集計クエリに結合できます。

例:

SELECT
    A.CaseNo,
    A.Date,
    B.Remarks
FROM (
    SELECT
        CaseNo,
        MAX(Date)
    FROM tblCaseDev 
    WHERE Date > GetDate()
    GROUP BY CaseNo
) A 
JOIN tblCaseDev B
    ON A.CaseNo = B.CaseNo
    AND A.Date = B.Date
于 2013-08-28T01:38:57.833 に答える
0

ROW_NUMBER()すべてのグループに連番を生成し、降順ColAで並べたものを使用できます。ColB

SELECT     ColA, ColB, ColC
FROM 
          (
               SELECT    ColA, ColB, ColC,
                         ROW_NUMBER() OVER(PARTITION BY ColA 
                                           ORDER BY ColB DESC) rn
               FROM tablename
          ) x
WHERE     rn = 1

で結び付いた複数のレコードを取得したい場合はColB、 に変更するとよいでしょうDENSE_RANK()

于 2013-08-28T01:34:12.710 に答える