2
id   tmpname      date_used        tkt_nr
---|---------|------------------|--------|
1  | template| 04/03/2009 16:10 | 00011  |
2  | templat1| 04/03/2009 16:11 | 00011  |
5  | templat2| 04/03/2009 16:12 | 00011  |
3  | diffname| 03/03/2009 15:11 | 00022  |
4  | diffname| 03/03/2009 16:12 | 00022  |
6  | another | 03/03/2009 16:13 | NULL   |
7  | somethin| 24/12/2008 11:12 | 00023  |
8  | name    | 01/01/2009 12:12 | 00026  |

結果が欲しいのですが:

id   tmpname      date_used        tkt_nr
---|---------|------------------|--------|
5  | templat2| 04/03/2009 16:12 | 00011  |
4  | diffname| 03/03/2009 16:12 | 00022  |
7  | somethin| 24/12/2008 11:12 | 00023  |
8  | name    | 01/01/2009 12:12 | 00026  |

したがって、私が探しているのはtkt_nr、datetimeの最大値に基づいて、NULLを除く個別の値を持つことです。

私はいくつかのオプションを試しましたが、常に失敗しました

SELECT *
FROM  templateFeedback a 
JOIN (
      SELECT ticket_number, MAX(date_used) date_used
      FROM   templateFeedback
      GROUP BY ticket_number
     ) b 
ON a.ticket_number = b.ticket_number AND a.date_used = b.date_used

助けていただければ幸いです。残念ながら、SQLServerと互換性のあるコードが必要です。

4

1 に答える 1

3

ウィンドウ関数を発見して以来、私はこの方法をやめました。同じタイムスタンプを持つ 2 つのレコードがあり、結果セットに 2 つのレコードを取得することがよくあります。tSQL のコードは次のとおりです。オラクルも同様です。mySQL はまだこれをサポートしていないと思います。

Select id, tmpname, date_used, tkt_nbr
From 
(
    Select id, tmpname, date_used, tkt_nbr,
        rownum = Row_Number() Over (Partition by tkt_nbr Order by date_used desc)
) x
Where row_num=1
于 2012-09-24T18:42:53.650 に答える