2017-08-23 50 views
1

我正在python中使用sqlite3数据库,我需要从日期获取所有数据,但我只需要每个用户的最后一行。让我来解释一下: 我当前的代码是这样的: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) 
+0

但这只会给我一个结果,不是吗?我需要每个用户的一个结果。该数据库可以是这样的,例如:用户1 用户2 4114 用户2 4112 用户3 4109 ,我需要得到每个用户 – Javierd98

+1

的最后一排@ Javierd98疑难杂症,请查看更新的查询。 – alecxe

+0

谢谢!那正是我需要的! – Javierd98

1

为了得到一个输出行的每个用户,使用分组。 要选择哪一行,从每个组返回,use MAX()

c.execute("""SELECT user, 
        [other fields], 
        MAX(timestamp) AS timestamp 
      FROM MyTable 
      WHERE user != ? 
       AND timestamp >= ? 
      GROUP BY user 
      """, (user, pastTS))