我有两张桌子:
父母(电子邮件,姓名等)
儿童(电子邮件,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
请不要嘲笑我到目前为止所得到的内容!...我认为我的大脑已经被炒了!
答案 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;