0

我有两张桌子:

父母(电子邮件、姓名、其他)
孩子(电子邮件、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,然后明天发生同样的事情,您现在有两条 DOC_ID = 1 的记录,其中 RANK 为 1?

您可以使用类似的方法以正确的顺序显示记录。 查询 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 回答