這是常見的有一個表,其中例如字段是帳戶,價值和時間。用於檢索每個帳戶最後一個值的最佳設計模式是什麼?不幸的是,分組中的最後一個關鍵字爲您提供了數據庫中的最後一個物理記錄,而不是任何排序中的最後一個記錄。這意味着恕我直言,它永遠不應該被使用。我使用的兩種笨拙方法是子查詢方法或輔助查詢來確定最後一條記錄,然後加入表中查找值。沒有更優雅的方法嗎?去年價值MS-訪問設計模式的分組
2
A
回答
1
子查詢選項聽起來對我來說最好,就像下面的psuedo-sql一樣。可能/有必要通過連接來優化它,這取決於SQL引擎的功能。
select *
from table
where account+time in (select account+max(time)
from table
group by account
order by time)
1
你能不能做:
select account,last(value),max(time)
from table
group by account
我測試了這個(授予一個非常小的,幾乎是微不足道的記錄集)和它產生正確的結果。
編輯:
這也不能在一些更多的測試後工作。在過去的一段時間裏,我做了一些相關的訪問編程,並且覺得有一種方法可以完成你在一個查詢中所要求的內容,但是現在我要畫一個空白。抱歉。
1
0
@shs
是的,選擇最後一個(價值)應該工作,但它不會......我的理解,雖然我不能產生權威的來源是最後一個(價值)給出了最後的物理記錄在訪問文件中,這意味着它可能是第一個時間,但最後一個是物理上的。所以我不認爲你應該使用最後(價值)除了一個非常糟糕的隨機行之外的任何東西。
1
@Tom 對於我來說,執行您建議的「In」查詢可能會更容易。一般我做類似
select T1.account, T1.value
from table T as T1
where T1 = (select max(T2.time) from table T as T2 where T1.account = T2.Account)
0
也許下面的SQL很笨拙,但它似乎在Access中正常工作。
SELECT
a.account,
a.time,
a.value
FROM
tablename AS a INNER JOIN [
SELECT
account,
Max(time) AS MaxOftime
FROM
tablename
GROUP BY
account
]. AS b
ON
(a.time = b.MaxOftime)
AND (a.account = b.account)
;
0
我試圖找到使用Access 2003查詢生成器在一組最新的日期,並跑進試圖用持續日期字段同樣的問題。但它看起來像使用MAX查找lates日期。
0
後字面上年搜索的我終於找到了答案低於#3的鏈接。上面的子查詢將起作用,但速度非常慢 - 對我的目的來說,速度減慢。
更受歡迎的答案是三級查詢:第一級查找最大值,第二級查找基於第一查詢的字段值。然後將結果作爲表格連接到主查詢。編碼/維護快速但複雜且耗時。
這個鏈接工作,仍然運行得非常快,而且代碼/維護工作量少得多。感謝這個網站的作者。
相關問題
- 1. 跨表格MS訪問年齡計算
- 2. 歷年戰績-MS訪問
- 3. ms訪問年度標準
- 4. OCaml中的訪問者設計模式
- 5. 數據訪問層的設計模式
- 6. 數據訪問層設計模式
- 7. 實現訪問者設計模式
- 8. 文件訪問設計模式
- 9. 數據訪問設計模式
- 10. 數據訪問層設計模式
- 11. 數據庫訪問設計模式
- 12. 數據訪問設計模式
- 13. 訪問SQL - 計獨特的價值
- 14. 的MS Access(2010年)使設計視圖
- 15. 訪問價值
- 16. 去年的計算總計
- 17. MS-訪問 - 分組select語句
- 18. 設計模式的分類
- 19. 訪客設計模式
- 20. 訪問2007年更新組合框值
- 21. 訪問2013年:禁用模式
- 22. 設計師設計模式與訪客設計模式的區別
- 23. 有測量/價值關係的設計模式嗎?
- 24. MS訪問量 - 計算
- 25. 設計模式分配
- 26. 如何去解決這個問題(設計模式)
- 27. 按會計年分組(Oracle)
- 28. 計數行 - 今年分組
- 29. mvp設計模式 - 問題
- 30. 設計模式問題