0

日付を保持するテーブルがありますが、場所ごとに条件が真である最新の日付を知る必要があります。唯一の問題は、「メモ」という列を追加すると、クエリが壊れて返される行が多すぎることです。現在のクエリは.. .

SELECT
        Location,
        MAX(date) AS date,
        type,
        notes
  FROM NotesTable a
 INNER JOIN Location b on a.LocationID = b.LocationID
 INNER JOIN Type c on a.typeid = c.typeid
 WHERE typeid <> 8
 GROUP BY Location, type, notes

メモ列をコメントアウトすると正常に機能しますが、それをグループ化に追加するとすぐに、必要以上の行が返されます。

サブクエリを使用してみましたが、まだ機能しません。以下のサブクエリ

SELECT
        r.location,
        r.date,
        r.type,
        t.notes
  FROM (SELECT Location, MAX(date), type
          FROM NotesTable a INNER JOIN Location b on a.LocationID = b.LocationID
         INNER JOIN Type c on a.typeid = c.typeid
         WHERE typeid <> 8
         GROUP BY location,type
        ) r
INNER JOIN NotesTable t ON t.date = r.date

他の提案はありますか?

4

2 に答える 2

2
select * from
(
     SELECT Location,Date, Type, Notes, Row_Number() Over (Partition By Location, Type order by date desc) RN 
     FROM
          NotesTable a
           INNER JOIN Location b on a.LocationID = b.LocationID
           INNER JOIN Type c on a.typeid = c.typeid
      WHERE typeid <> 8
) v
WHERE rn = 1 
于 2012-09-20T09:37:42.107 に答える
0

クエリはほぼ正しいです。この追加条件をON句に追加する必要があります

    AND
    t.location = r.location AND
    t.type = r.type

完全なクエリ、

SELECT r.location
     , r.DATE
     , r.type
     , t.notes
FROM (
    SELECT Location
         , MAX(DATE) maxDate
         , type
    FROM NotesTable a
        INNER JOIN Location b
            ON a.LocationID = b.LocationID
        INNER JOIN Type c
            ON a.typeid = c.typeid
    WHERE typeid <> 8
    GROUP BY location
            , type
    ) r
INNER JOIN NotesTable t
    ON t.DATE = r.maxDate AND
        t.location = r.location AND
        t.type = r.type
于 2012-09-20T09:38:56.753 に答える