簡體   English   中英

從 MySQL 查詢中選擇最后一行

[英]Select last row from a MySQL query

我有一個查詢,它返回一些沒有任何順序的日期。 我需要從子查詢中選擇最后一行。 問題是我可以在網上找到的所有解決方案都使用類似

ORDER BY qry_doc_dates.arrival_date DESC LIMIT 1

Select qry_doc_dates.arrival_date 
FROM (qry_doc_date) AS qry_doc_dates 
ORDER BY qry_doc_dates.arrival_date DESC 
LIMIT 1

這不會滿足我的目的,因為它首先將日期排序為 DESC(或 ASC)。

假設 qry_doc_date 返回:

"2019-05-27",
"2019-05-13",
"2019-05-20",
"2019-05-22",
"2019-07-12",
"2019-05-22",
"2019-07-16",
"2019-05-22"

正如我們所看到的,返回的值沒有順序。 如果我使用

ORDER BY qry_doc_dates.arrival_date DESC LIMIT 1

然后它返回“2019-07-16”但我需要“2019-05-22”這是最后一行。

編輯 1:我正在嘗試將此 VBA 查詢轉換為 MYSQL。

DLast("arrival_date", "qry_doc_date", "[package_id] = " & Me!lstPackage)

我想我誤解了 VBA 查詢想要返回的內容。 另一個問題是我沒有辦法運行這個 VBA 查詢並自己檢查結果。

根據 SQL 標准,您的問題沒有太大意義。 在沒有ORDER BY子句的情況下,數據庫引擎可以自由地以任何順序返回行。 這個順序甚至可能會隨着時間而改變。

所以基本上你是在請求查詢返回的“最后一個隨機行” 如果是這種情況,為什么不獲得“第一隨機行”? 它沒有任何區別,不是嗎?

獲取最后一個隨機行的唯一方法是獲取所有並丟棄除最后一行之外的所有其他行。

現在,如果您只需要一個隨機行,我建議您只獲取第一個隨機行,問題就解決了。

針對您編輯中的附加信息:

編輯 1:我正在嘗試將此 VBA 查詢轉換為 MYSQL。

 DLast("arrival_date", "qry_doc_date", "[package_id] = " & Me!lstPackage)

我想我誤解了 VBA 查詢想要返回的內容。 另一個問題是我沒有辦法運行這個 VBA 查詢並自己檢查結果。

除非您的數據集qry_doc_date是通過order by子句order by ,否則DFirstDLast域聚合函數將基本上返回一個隨機記錄。

這在MS Access 文檔中針對這兩個功能進行了說明:

當您只需要該字段中的任何值時,您可以使用DFirstDLast函數從表或查詢中的特定字段返回隨機記錄

[...]

如果要返回一組記錄(域)中的第一條或最后一條記錄,則應創建按升序或降序排序的查詢,並將 TopValues 屬性設置為 1。有關詳細信息,請參閱 TopValues 屬性主題。 從 Visual Basic for Applications (VBA) 模塊,您還可以創建 ADO Recordset 對象並使用 MoveFirst 或 MoveLast 方法返回記錄集中的第一條或最后一條記錄。

您需要的是在qry_doc_date中包含一個連續的行號

然后你可以使用這樣的東西:

ORDER BY qry_doc_dates.row_number DESC LIMIT 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM