0

派生テーブルを使用してテーブル内の 1 つのレコードを別のレコードに結合しようとしていますが、そのための正しいクエリを見つけるのに少し苦労しています。私がしたいのは、結合されている外部クエリからのデータに応じて、派生テーブルが where ステートメントを使用するクエリに派生テーブルを JOIN することです。だからここに私が取り組んでいる現在のコードがあります:

SELECT a.viewerid, a.id, v.id AS entry, a.jobid, v.sourceid, v.cost, a.applicant
FROM a_views a,
JOIN (
    SELECT TOP 1 id, sourceid, cost FROM a_views vt
    WHERE vt.viewerid = a.viewerid
      AND vt.viewed_at <= a.viewed_at
      AND vt.referrer NOT LIKE '%' + vt.hostName + '%'
      ORDER BY viewed_at DESC
) v

派生テーブルは、外部クエリが使用する同じテーブルのクエリであり、一意の自動インクリメント PKvieweridであるテーブル全体のそれ自体への FKです。idビューアー ID が一致し、日付スタンプ (viewed_at) が外側の日付スタンプより小さく、リファラー列に hostName 列が含まれていない a_views テーブルの最新のレコードを取得する必要があります。

4

1 に答える 1

2

APPLYが必要なようです:

SELECT a.viewerid, a.id, v.id AS entry, a.jobid, v.sourceid, v.cost, a.applicant
FROM a_views a
    CROSS APPLY (
        SELECT TOP 1 id, sourceid, cost FROM a_views vt
        WHERE vt.viewerid = a.viewerid
          AND vt.viewed_at <= a.viewed_at
          AND vt.referrer NOT LIKE '%' + vt.hostName + '%'
          ORDER BY viewed_at DESC
    ) v

あなたのクエリはJOIN私が行ったので、あなたの正確な要件に応じてCROSS APPLY必要になるかもしれません.OUTER APPLY

于 2012-12-04T18:01:23.677 に答える