2017-07-31 26 views
1

我們有一個客戶數據庫,我試圖讓所有在三週或更長時間內沒有對他們發表評論的客戶文件。返回至少X天無記錄的文件

我正在用兩張桌子;帶有關於文件信息的文件表(如分配給哪個工作人員的文件)以及數據庫中所有註釋均在其中的註釋表。它們通過文件編號字段鏈接。

如果我想要最後一個音符的文件號和日期,我應該使用什麼SQL?

我曾嘗試:

SELECT db_file_notes.file_num, Last(db_file_notes.file_date) AS 
LastOfnote_date, Last(db_file_notes.note_key) AS LastOfnote_key 
FROM db_file_notes 
GROUP BY db_file_notes.file_num 
ORDER BY db_file_notes.file_num, Last(db_file_notes.note_date); 

但是也有一些在得到的查詢不應該是文件的屈指可數。例如,文件#212720的最後一個註釋是在7/28,但上面的查詢返回最後一個註釋日期6/26(前一個註釋)。然後是文件#212781和7/21上的實際最後一個註釋,但是查詢返回6/12(自查詢返回的那個之後有5個更新的註釋)。

在上述SQL中沒有日期標準,但如果我添加< = Date() - 21,它仍然不正確(212710仍然存在,最後一個註釋爲6/26)。有趣的是,如果我在文件編號上添加過濾器以僅返回單個文件編號,如212720,則最後一個記錄日期將正確返回。

我試過按文件編號排序,然後記錄日期,文件編號和音符鍵(一般假設新音符具有更高的鍵值)並獲得相同的行爲。而不是排序上升然後採取最後一個記錄,我試着排序下降,並採取第一;這會返回受上述影響的文件的正確註釋,但是新案例現在有問題,但現在正好相反。

+1

嘗試使用'Max()'而不是'Last()'。你會得到預期的結果嗎? – Parfait

+0

使用'MAX'作爲@Parfait表示,或者用'file_date'和'SELECT TOP 1'排序...... _EDIT:_類似的劃痕,因爲它不回答問題,但返回最高的file_date。 –

+0

工作正常!非常感謝,自從週五以來,我已經用了14個小時。如果你不介意,Max()和Last()之間有什麼區別? –

回答

0

樣品表:
enter image description here

沒有帶來第二個表,你可以使用以下兩種:

這將返回頂部分組日期。例如,如果您的最大file_date是12/06/2017,則將返回file_date爲12/06/2017的所有記錄。

SELECT TOP 1 file_num 
      , file_date 
      , note_key 
FROM  db_file_notes 
WHERE  DATEDIFF("d",file_date,DATE())>=21 
ORDER BY file_date DESC 

enter image description here

該代碼,而另一方面,將返回的最大時間爲每個組數字(一組爲組file_numnote_key

SELECT  file_num 
      , MAX(file_date) AS Max_File_date 
      , note_key 
FROM  db_file_notes 
WHERE  DATEDIFF("d",file_date,DATE())>=21 
GROUP BY file_num, note_key 

enter image description here

注意:如果該字段是唯一的acros,則不必使用表名限定每個字段名稱所有的桌子(或者你只是使用一張桌子)。

相關問題