我在python中使用sqlite3数据库,我需要从日期获取所有数据,但我只需要每个用户的最后一行。让我解释一下自己: 我目前的代码是:
conn = sqlite3.connect('database.db')
c = conn.cursor()
t = (user, pastTS)
resultPoints = c.execute("SELECT * FROM table WHERE user != ? AND timestamp >= ?", t)
conn.close()
这个问题是,当我只想要最后一个时,它会从同一个用户返回多个条目/行。 有没有简单的方法来实现这一点,还是应该对光标进行分析以删除重复的字段?
答案 0 :(得分:2)
如果我正确理解您的问题,您可以按用户分组并获取每个用户的最大时间戳值,然后加入table
并输出结果:
c.execute("""
SELECT *
FROM (
SELECT user, MAX(timestamp) as MaxTime
FROM table
GROUP BY user
) t2
INNER JOIN table t1
ON t1.user != ? and t1.user = t2.user AND t1.timestamp = t2.MaxTime
""", t)
result = c.fetchall()
print(result)
答案 1 :(得分:1)
要为每个用户获取一个输出行,请使用分组。 要选择要返回的每个组中的哪一行,use MAX():
c.execute("""SELECT user,
[other fields],
MAX(timestamp) AS timestamp
FROM MyTable
WHERE user != ?
AND timestamp >= ?
GROUP BY user
""", (user, pastTS))