sql >> データベース >  >> RDS >> Sqlserver

複数のレコードを指定して異なる最大値に基づいて最大値を取得する SQL クエリ

    SELECT
      MAX(id) id,
      po_nbr
    FROM
      temp
    GROUP BY
      po_nbr
    

    関連付けられた日付を取得するには、次のようにします (これは連続した ID を意味することに注意してください):

    SELECT
      temp.id,
      temp.po_nbr,
      temp.crt_ts
    FROM
      temp
      INNER JOIN (
        SELECT MAX(id) id FROM temp GROUP BY po_nbr
      ) latest ON latest.id = temp.id
    

    連続した ID がない場合は、次のようになります:

    SELECT
      MAX(temp.id) id,
      temp.po_nbr,
      temp.crt_ts
    FROM
      temp INNER JOIN (
        SELECT   MAX(crt_ts) crt_ts, po_nbr 
        FROM     temp i
        GROUP BY po_nbr
      ) latest ON latest.crt_ts = temp.crt_ts AND latest.po_nbr = temp.po_nbr
    GROUP BY
      temp.po_nbr,
      temp.crt_ts
    

    GROUP BY po_nbr ごとに 2 つの同じ日付がないことが保証されている場合は、省略できます グループ。

    crt_ts のインデックス および po_nbr 最後のクエリで役立つ場合は、結合されたインデックスを 1 つ作成するのが最適です。



    1. 正規表現とpreg_matchを使用して、類似の文字列を検索して置換します

    2. FPDFセルポジショニング

    3. あるテーブルから別のテーブルへの値の挿入

    4. タイプ別にグループ化された特定の日付に最も近いレコードを取得します