Python sqlite3选择没有重复字段

时间:2017-08-23 15:25:26

标签: python python-3.x sqlite

我在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()

这个问题是,当我只想要最后一个时,它会从同一个用户返回多个条目/行。 有没有简单的方法来实现这一点,还是应该对光标进行分析以删除重复的字段?

2 个答案:

答案 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))