2012-11-08 55 views
0

訂購子記錄我有兩個表:更新表按日期

家長(電子郵件,姓名等)
CHILD(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 

請不要笑到目前爲止......我認爲我的大腦是 油炸!

+2

你能詳細說一下嗎?你想用數字更新CHILD.RANK?你爲什麼需要PARENT表? – dbd

+0

SQL Server具有'ROW_NUMBER()'函數來創建排名值。但是,MS Access不支持它。檢查出這個問題在MS Access中執行它 - http://stackoverflow.com/questions/3516739/access-function-or-expression-equivalent-of-sql-row-number – dbd

+0

孩子等級按電子郵件ID ..所以,是的,從技術上說,你不需要父桌...如果在同一天下載了幾個不同的文檔,他們將採取該特定電子郵件的最新記錄...按文檔 – Hightower

回答

1

如果您使用Rank_ID進行多次顯示(應留給查詢),您的設計可能會有問題。

您是否考慮過如果今天檢出DOC_ID = 1會發生什麼情況,然後運行更新以使其排名第一,然後明天發生同樣的事情,並且您現在有兩個DOC_ID = 1的記錄,RANK爲1 ?

你可以使用類似的東西來按照正確的順序顯示記錄。 查詢1只會按順序顯示記錄。 查詢2將添加一個Rank值(需要第一個查詢)。

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; 
+0

分組是...謝謝對於這個...查詢實際上是一次數據清理。所以我想現在的數據將是靜態的......雖然很好的建議。我會檢查解決方案。謝謝 – Hightower