【发布时间】:2022-01-09 02:45:37
【问题描述】:
我正在尝试从我创建的 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 个),Max Time(在本例中为 07: 00 表示 21-12-01,02:00 表示 21-12-02)。
我想要用于排序的最终指标(这是我遇到问题的地方):我还想选择包含最高 TotalAcc 的行。 p>
目前,这是我用来提取数据的 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,但它返回的数字与给定时间和日期的列中的实际最大值不同。
设置 example = '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 逻辑有时似乎有点混乱。
【问题讨论】:
-
如果最大
Time的行与最大TotalAcc的行不同怎么办? -
以我正在使用的数据,这应该是不可能的。我按时间排序后使用
df['TotalAcc'] = df.['Acc'].cumsum()。我按小时对数据进行分组,我认为问题出现在 07:00 有多个数据点的情况下(由于在给定小时内多次提取数据并将其附加到 SQLite 数据库。 -
请发布想要的结果或解释为什么当前输出不能满足您的需求。
-
好的,我会把它添加到原帖中。
-
将
TotalAcc列定义为TEXT很可能会给您带来问题。它应该被定义为INTEGER,否则你会得到字母顺序最大值为TotalAcc的行。检查这个:dbfiddle.uk/…
标签: python-3.x pandas sqlite