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

我想要一个小组,为我的每一个IdType我的最后一个“Id_Try记录”带来。

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

不会,因为它会给我带来最后一个 Id_Try最后一个日期(示例中的记录日期 3)。而且我不在乎它是否是最后一个日期,我需要最后一个 Id_Try 的日期。

这只能通过子选择解决吗?或者有条款可以做吗?

这是预期的结果:

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

希望这可以帮助。

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 回答
1

我认为您需要将其分为两部分:

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

但这没有意义,因为您说 IDId_try 具有相同的值。我假设您的意思是 Id_try 可能是 2?否则我认为我的结果匹配。

于 2012-09-06T16:42:24.423 回答