我正在嘗試從我創建的 SQLite 資料庫中選擇資訊(類似于此):
Date Time Acc TotalAcc Proc TotalProc
21-12-01 | 00:00 | 133 | 133 | 76 | 76
21-12-01 | 01:00 | 270 | 403 | 260 | 336
21-12-01 | 02:00 | 35 | 438 | 24 | 360
21-12-01 | 02:00 | 50 | 453 | 30 | 366
21-12-02 | 00:00 | 113 | 113 | 89 | 89
21-12-02 | 07:00 | 2 | 1290 | 6 | 1199
21-12-02 | 07:00 | 28 | 1316 | 17 | 1210
21-12-02 | 07:00 | 432 | 1720 | 384 | 1577
21-12-02 | 07:00 | 502 | 2222 | 403 | 1975
我要收集的資訊:唯一的日期(每天只有 1 個),以及最大時間(在這種情況下,21-12-01 為 07:00,21-12- 為 02:00- 02)。
我想要排序的最后一個指標(這是我遇到問題的地方):我還想選擇包含最高 TotalAcc的行。
目前,這是我用來提取資料的 SQL 邏輯:
例子 =
"SELECT DISTINCT Date, TotalAcc, TotalProc, MAX(Time)
FROM table_name
GROUP BY Date
ORDER BY Date DESC, MAX(Time) DESC"
df = pd.read_sql_query(example, con)
print(df)
輸出

我希望從資料庫中獲取的資料應該更像這樣:
Date TotalAcc TotalProc MAX(Time)
0 | 21-12-02 | 453 | 366 | 02:00
1 | 21-12-01 | 2222 | 1975 | 07:00
我在選擇資料時嘗試使用 MAX(TotalAcc) 而不是 TotalAcc,但它回傳的數字與給定時間和日期列中的實際最大值不同。設定示例 ='SELECT MAX(TotalAcc) FROM table_name'回傳一個非最大值(例如 1290)。
我很抱歉沒有給出一個完全可復制的例子,我從一個源中提取我的資料點,它填充了我這樣創建的表:
with con:
con.execute('''
CREATE TABLE table_name (
Date TEXT,
Time TEXT,
Acc TEXT,
TotalAcc TEXT,
Proc TEXT,
TotalProc TEXT
);''')
任何和所有想法都值得贊賞,SQL 邏輯有時似乎有點混亂。
uj5u.com熱心網友回復:
我懷疑您想要按照以下方式進行查詢:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Date
ORDER BY Time DESC, TotalAcc DESC) rn
FROM table_name
)
SELECT Date, Time, Acc, TotalAcc, Proc, TotalProc
FROM cte
WHERE rn = 1;
這將每個日期回傳一行,具有最大時間。如果同一日期的兩行或更多行也具有相同的最大時間,則將TotalProc選擇具有最高時間的行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/372442.html
