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

SQL查询查找事实表中的趋势

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

    例如,选择在 2014-01-01 2014-01-04

    entity_id | value | date
    12        | 15    | 2014-01-01 
    56        | 21    | 2014-01-04
    12        | 15    | 2014-01-04 
    56        | 21    | 2014-01-02 
    12        | 25    | 2014-01-02 
    12        | 16    | 2014-01-03 
    

    例如,日期之间 2014-01-01 实体id 12的值减少了两次:

    entity_id | value | date       | old_value
    12        | 16    | 2014-01-03 | 25
    12        | 15    | 2014-01-04 | 16
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    我想你想要 lag() :

    select t.*
    from (select t.*, lag(value) over (partition by entity_id order by date) as prev_value
          from t
         ) t
    where prev_value > value;
    

    您可以添加 and date >= '2014-01-01' and date <= '2014-01-04'

        2
  •  0
  •   Creative87    6 年前

    MySQL中的范围仅为<或>或者=您可以根据需要组合它们,但仍然可以使用LIke%date%来检索类似的日期

        3
  •  0
  •   Matt Jameson    6 年前

    假设你的桌子 entity

    SELECT e.entity_id, e.value as old_value, e2.value as new_value, v2.date
    FROM entity e
    JOIN entity e2 ON v.entity_id = v2.entity_id
    AND e.date < e2.date
    AND e.value > e2.value
    GROUP BY e.date