代码之家  ›  专栏  ›  技术社区  ›  joddm

在sqlite中查找最长的公共日期跨度

  •  0
  • joddm  · 技术社区  · 6 年前

    我有一个包含一些库存数据的sqlite数据库。第一列是日期时间,最后一列是股票的断续器/名称。其他列是价格和数量,但与此处无关。

    这是头尾:

        sqlite> select * from History order by dt ASC limit 5;
        "2003-01-02 11:00:00",9.65,9.65,9.65,9.65,1000.0,ACY
        "2003-01-02 11:00:00",62.0,62.0,62.0,62.0,30000.0,AMER
        "2003-01-02 11:00:00",0.345,0.345,0.34,0.34,60000.0,CNR
        "2003-01-02 11:00:00",1.41,1.41,1.41,1.41,45000.0,CRU
        "2003-01-02 11:00:00",32.8,32.85,32.8,32.85,38000.0,DNBNOR
        sqlite> select * from History order by dt DESC limit 5;
        "2010-04-09 19:15:00",3.045,3.05,3.045,3.05,6000.0,ACTA
        "2010-04-09 19:15:00",117.4,117.4,117.1,117.1,14900.0,ACY
        "2010-04-09 19:15:00",3.15,3.15,3.15,3.15,7800.0,AGI
        "2010-04-09 19:15:00",160.25,160.25,160.25,160.25,11300.0,AKER
        "2010-04-09 19:15:00",94.925,94.925,94.65,94.775,32900.0,AKSO
    

    如你所见,我有2003年至2010年的数据,大约有130只股票。但并非所有的股票由于合并、交换等原因都在同一时间范围内。

    我想知道的是大多数股票共同拥有的(最长)时间跨度,假设130只股票中有50只在2004-2010年左右,并返回股票的日期范围和名称。是否可以使用sqlite?

    编辑:我认为一个基本输出可能是什么样子的例子

    starttime              endtime                totaltime  stock
    "2003-01-02 11:00:00", "2010-04-09 19:15:00", 12345678, ACY
    "2003-01-02 11:00:00", "2007-01-07 16:00:00", 12345,    CNR
    ...
    

    那么我可以点菜了 totaltime 看看哪些股票的数据最多。

    1 回复  |  直到 6 年前
        1
  •  1
  •   The Impaler    6 年前

    with stock_life as (
      select
          stock,
          min(recorded_at) as starttime,
          max(recorded_at) as endtime,
          julianday(max(recorded_at)) - julianday(max(recorded_at)) as totaltime
        group by stock
      )
    select * from stock_life
      order by totaltime desc
      limit 50