0

私がする必要があるcol7のは、 column の個別の値ごとにcolumn の MAX 値を取得することcol6です。以下サンプルデータ。IPXPKです。

結果は次のようになります

IPX col1    col2    col3    col4    col5    col6    col7
2097177 32  25  1   3   20  10011   19
2097465 32  313 15  5   246 10012   245
2097783 32  631 27  7   440 10013   439

それらをすべて一時テーブルに選択して最大値を取得できましたが、これらの結果を取得するためのクエリがあると思いますが、それを理解できません。助けてくれてありがとう。

IPX    col1 col2    col3    col4    col5    col6    col7
2097157 32  5   0   3   4   10011   3
2097159 32  7   0   5   6   10011   5
2097161 32  9   0   7   8   10011   7
2097163 32  11  0   9   10  10011   9
2097169 32  17  0   11  12  10011   11
2097171 32  19  0   13  14  10011   13
2097173 32  21  0   15  16  10011   15
2097175 32  23  1   1   18  10011   17
2097177 32  25  1   3   20  10011   19
2097440 32  288 14  1   226 10012   225
2097442 32  290 14  3   228 10012   227
2097444 32  292 14  5   230 10012   229
2097446 32  294 14  7   232 10012   231
2097448 32  296 15  15  256 10012   255
2097456 32  304 16  15  272 10012   271
2097457 32  305 14  13  238 10012   237
2097459 32  307 14  15  240 10012   239
2097461 32  309 15  1   242 10012   241
2097463 32  311 15  3   244 10012   243
2097465 32  313 15  5   246 10012   245
2097729 32  577 25  1   402 10013   401
2097731 32  579 25  3   404 10013   403
2097733 32  581 25  5   406 10013   405
2097735 32  583 25  7   408 10013   407
2097737 32  585 25  9   410 10013   409
2097745 32  593 25  11  412 10013   411
2097747 32  595 25  13  414 10013   413
2097749 32  597 25  15  416 10013   415
2097751 32  599 26  1   418 10013   417
2097753 32  601 26  3   420 10013   419
2097760 32  608 26  5   422 10013   421
2097762 32  610 26  7   424 10013   423
2097764 32  612 26  9   426 10013   425
2097766 32  614 26  11  428 10013   427
2097768 32  616 26  13  430 10013   429
2097776 32  624 26  15  432 10013   431
2097777 32  625 27  1   434 10013   433
2097779 32  627 27  3   436 10013   435
2097781 32  629 27  5   438 10013   437
2097783 32  631 27  7   440 10013   439
4

3 に答える 3

1

これを試して:

WITH Data AS
(
    SELECT  *,
            ROW_NUMBER() OVER(PARTITION BY col6 ORDER BY col7 DESC) AS Position
      FROM  <YOUR-TABLE> a
)
SELECT  IPX, col1, col2, col3, col4, col5, col6, col7
  FROM  Data 
 WHERE  Position = 1
于 2012-07-05T23:35:13.263 に答える
0

SQL Server 2000 を使用している場合は、次のことを行う必要があります。

SELECT x.IPX, x.col1, x.col2, x.col3, x.col4, x.col5, x.col6, x.col7
FROM dbo.unspecified_table_name AS x
INNER JOIN (SELECT col6, col7 = MAX(col7)
  FROM dbo.unspecified_table_name
  GROUP BY col6) AS y
ON x.col6 = y.col6
AND x.col7 = y.col7;

同数の場合、これにより複数の行が生成されることに注意してください。

SQL Server 2005 では、同数の場合に複数の行を表示するかどうかを選択できます。これは任意の行を選択します:

;WITH x AS
(
  SELECT IPX, col1, col2, col3, col4, col5, col6, col7,
    rn = ROW_NUMBER() OVER (PARTITION BY col6 ORDER BY col7 DESC)
    FROM dbo.unspecified_table_name
)
SELECT IPX, col1, col2, col3, col4, col5, col6, col7
  FROM x
  WHERE rn = 1;

同点を解消する方法がわかっている場合は、 に基準を追加できますORDER BY。たとえば、IPX 値が最も低い行を選択する場合は、次のように言えます。

;WITH x AS
(
  SELECT IPX, col1, col2, col3, col4, col5, col6, col7,
    rn = ROW_NUMBER() OVER (PARTITION BY col6 ORDER BY col7 DESC, IPX)
    FROM dbo.unspecified_table_name
)
SELECT IPX, col1, col2, col3, col4, col5, col6, col7
  FROM x
  WHERE rn = 1;

同点の場合に両方の行を返したい場合は、次のように変更ROW_NUMBER()RANK()ます。

;WITH x AS
(
  SELECT IPX, col1, col2, col3, col4, col5, col6, col7,
    rn = RANK() OVER (PARTITION BY col6 ORDER BY col7 DESC)
    FROM dbo.unspecified_table_name
)
SELECT IPX, col1, col2, col3, col4, col5, col6, col7
  FROM x
  WHERE rn = 1;
于 2012-07-05T23:48:27.597 に答える
0
SELECT f1.col6, f1.col7
FROM tmp_DO_CLOSE_tbl f1
WHERE col7 = (
SELECT MAX(f2.col7)
FROM tmp_DO_CLOSE_tbl f2
WHERE f1.col6 =f2.col6
)
ORDER BY col6, col7

それは私が学ぶ必要があるものなので、上記の解決策を使用します。早速のお返事ありがとうございます。

于 2012-07-05T23:50:57.340 に答える