Python sqlite3选择不重复字段
Posted
技术标签:
【中文标题】Python sqlite3选择不重复字段【英文标题】:Python sqlite3 select without repeating field 【发布时间】:2017-08-23 15:25:25 【问题描述】:我在 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()
问题在于,当我只想要最后一个时,它会从同一个用户返回多个条目/行。 是否有任何简单的方法可以实现这一点,或者我应该分析光标以删除重复字段?
【问题讨论】:
【参考方案1】:如果我正确理解您的问题,您可以按用户分组并获取每个用户的最大时间戳值,然后加入 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)
【讨论】:
但这只会给我一个结果,不是吗?我需要每个用户的一个结果。数据库可能是这样的,例如: User1 4419 User2 4114 User2 4112 User3 4109 我需要获取每个用户的最后一行 @Javierd98 明白了,请查看更新后的查询。 谢谢!这正是我需要的!【参考方案2】:要为每个用户获取一个输出行,请使用分组。 要从每个组中选择要返回的行,use MAX():
c.execute("""SELECT user,
[other fields],
MAX(timestamp) AS timestamp
FROM MyTable
WHERE user != ?
AND timestamp >= ?
GROUP BY user
""", (user, pastTS))
【讨论】:
以上是关于Python sqlite3选择不重复字段的主要内容,如果未能解决你的问题,请参考以下文章
Android - 不自动选择 EditText 字段[重复]
无法使用 sqlite3 在磁盘上保存数据库 - Python [重复]
在python中使用sqlite3注入安全参数化查询[重复]
TypeError:“sqlite3.Cursor”对象不可下标。如何在没有for循环的情况下打印sql选择数据[重复]