0

私は2つのテーブルを持っています:

親(EMAIL、NAME、ETC)
子(EMAIL、DOC_DOC_ID、DOWNLOAD_DATE、RANK)

CHILD.RANKフィールドを更新するクエリを生成する必要があります。数値で並べ替えると、個別のDOC_IDがダウンロードされた日付でランク付けされます(1 =最新のドキュメントのダウンロード)。

SELECT
    P.EMAIL,
    C.DOC_ID,
    MAX(C.DOWNLOAD_DATE)
FROM
    PARENT P,
    CHILD C
WHERE
    P.EMAIL = C.EMAIL

私がこれまでに思いついたものを笑わないでください!...私の脳は揚げられていると思います!

4

1 に答える 1

1

表示以外の目的で Rank_ID を使用している場合 (これはクエリに任せる必要があります)、デザインに問題がある可能性があります。

今日 DOC_ID = 1 をチェックアウトし、更新を実行してランクを 1 にし、明日も同じことが起こり、RANK が 1 の DOC_ID = 1 のレコードが 2 つあるとしたら、どうなるか考えたことはありますか?

このようなものを使用して、レコードを正しい順序で表示できます。 クエリ 1は、レコードを順番に表示するだけです。クエリ 2は、ランク値を追加します (最初のクエリが必要です)。

QUERY 1:
SELECT
    LAST(EMAIL) AS EMAIL,
    DOC_DOC_ID,
    Max(DOWNLOAD_DATE) AS DOWNLOAD_DATE
FROM 
    CHILD
GROUP BY 
    DOC_DOC_ID
ORDER BY 
    Max(DOWNLOAD_DATE) DESC;


QUERY 2:
SELECT 
    testing.EMAIL, 
    testing.DOC_DOC_ID, 
    testing.DOWNLOAD_DATE, 
    (select 
         count(*)
     from
         Query1
     where
         DOWNLOAD_DATE>testing.DOWNLOAD_DATE)+1 AS RANK
FROM
    Query1 as testing
ORDER BY
    testing.DOWNLOAD_DATE DESC;
于 2012-11-08T16:43:53.170 に答える