1

私がこのテーブルを持っているとしましょうMyTbl

Record    Id_try   Id        Type IsOk DateOk
1         1        MYDB00125  A     0   NULL
2         1        MYDB00125  B     1   2012-07-19 20:10:05.000
3         1        MYDB00125  A     0   2012-07-25 14:10:05.000
4         2        MYDB00125  A     0   2012-07-19 22:10:05.000
5         1        MYDB00254  B     0   2012-07-19 22:10:05.000
6         1        MYDB00254  A     0   NULL
7         3        MYDB00125  A     1   2012-07-19 22:15:05.000
8         3        MYDB00125  B     1   2012-07-19 22:42:53.000
9         1        MYDB00323  A     1   2012-07-22 00:15:05.00 0
10        1        MYDB00323  C     0   NULL

そして、私は私の最後の「レコード」ごとIdに私を連れてくるグループが欲しいです。TypeId_Try

SELECT Id, MAX(Id_Try), MyTbl.Type, IsOK, MAX(DateOk) from MyTbl
GROUP BY Id, MyTbl.Type, IsOK

最後のId_Tryと最後の日付(例ではレコード3の日付)が表示されるため、実行ませ。そして、それが最後の日付であるかどうかは関係ありません。最後のId_Tryの日付が必要です。

これは副選択によってのみ解決されますか?またはhaving節でできるのでしょうか?

これは期待される結果です:

Record    Id_try   Id        Type IsOk DateOk
5         1        MYDB00254  B     0   2012-07-19 22:10:05.000
6         1        MYDB00254  A     0   NULL
7         3        MYDB00125  A     1   2012-07-19 22:15:05.000
8         3        MYDB00125  B     1   2012-07-19 22:42:53.000
9         1        MYDB00323  A     1   2012-07-22 00:15:05.00 0
10        1        MYDB00323  B     0   NULL
4

3 に答える 3

1

これを2つに分割する必要があると思います。

with maxIDTry as
(
   SELECT MAX(Id_try) as maxId, ID
   FROM MyTable
   GROUP BY ID
)
SELECT * FROM MyTable as mt
INNER JOIN maxIDTry as max
ON mt.id_try = max.maxId AND mt.id = max.id
于 2012-09-06T16:24:35.470 に答える
1

私はあなたがこれを望んでいると思います:

select * FROM 
 (
   select *, row_number() over (partition by id,type order by Id_try desc) as position from mytbl
) foo 
where position = 1
order by record

http://www.sqlfiddle.com/#!3/95742/5

サンプル結果セットリスト

9         1        MYDB00323  A     1   2012-07-22 00:15:05.00 0
10        1        MYDB00323  A     0   NULL

ただし、IDとId_tryの値が同じであると言っているので、それは意味がありません。Id_tryを2にするつもりだったと思いますか?そうでなければ、私の結果は一致すると思います。

于 2012-09-06T16:42:24.423 に答える
1

お役に立てれば。

SELECT  A.Record, A.Id_try, A.Id, A.Type, A.IsOk, A.DateOk
FROM    MyTbl A INNER JOIN (
        SELECT MAX(Id_Try) Id_Try, Id, B1.Type 
        from MyTbl B1
        GROUP BY Id, B1.Type) AS B 
ON A.Id_Try = B.Id_Try AND A.Id = B.Id AND A.Type = B.Type
ORDER BY A.RECORD
于 2012-09-06T16:53:16.030 に答える