更新表以按日期订购子记录

时间:2012-11-08 14:34:08

标签: sql ms-access

我有两张桌子:

父母(电子邮件,姓名等)
儿童(电子邮件,DOC_DOC_ID,DOWNLOAD_DATE,RANK)

我需要生成一个更新CHILD.RANK字段的查询,使用数字排序将每个不同的DOC_ID按下载日期排序(1 =最新的doc下载)

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

请不要嘲笑我到目前为止所得到的内容!...我认为我的大脑已经被炒了!

1 个答案:

答案 0 :(得分:1)

如果您将Rank_ID用于显示以外(应留给查询),您的设计可能会出现问题。

您是否考虑过如果今天检查了DOC_ID = 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;