使用Python中的SQLite3删除重复键但具有优先级的唯一行

时间:2013-08-01 17:09:15

标签: python sql sqlite duplicate-removal yahoo-finance

我对Python很陌生,我正在努力完成以下工作:

  1. 从Yahoo Finance News API中提取RSS源 - > YDN
  2. 将标题,链接,PubDate放入数据库表
  3. 仅存储唯一的标题和最新的PubDate
  4. 1和2我没有遇到任何问题但是当我尝试做3时,我遇到了一些麻烦。 以下是该表的外观:

    enter image description here

    正如您所看到的,我使用不同的PubDate复制了标题。我一直在尝试做的是遵循从Microsoft Kb ilustrated的步骤 - > Support Microsoft

    我能够完成步骤1 - 3:

    1. 选择所有具有计数的标题> 1进入名为holdkey的表
    2. 选择标题等于标题表中标题的所有不同记录
    3. 我的代码与MSFT链接中显示的代码略有不同:

      import sqlite3
      
      cur = db.cursor()
      cur.execute('''create table holdkey as 
                  select Title,count(*) 
                  from bar group by Title
                  having count(*)>1''')
      cur.execute('''create table holdup as 
                  select distinct bar.* 
                  from bar, holdkey 
                  where bar.Title = holdkey.Title''')
      

      我需要帮助的是,在我的保留表中(如屏幕截图所示),我仍然会获得重复的标题,因为pubDate是不同的,并且它被SQLite称为不同。有没有办法根据PubDate删除重复项?

      我理想情况下只保留最新版本,但删除副本更为重要。

      如果需要进一步说明,请与我们联系。感谢

1 个答案:

答案 0 :(得分:1)

尝试

SELECT b.symbol, b.title, b.link, b.pubdate
  FROM bar b JOIN
(
  SELECT title, MAX(pubdate) pubdate
    FROM bar
   GROUP BY title
) q ON b.title = q.title 
   AND b.pubdate = q.pubdate

这是 SQLFiddle 演示