【问题标题】:SQL query to compare value of a field for two different dates用于比较两个不同日期的字段值的 SQL 查询
【发布时间】:2015-10-13 14:11:07
【问题描述】:

我有一张这样的桌子:

Date    Name    Rating
01-Dec-14   Ash A
02-Dec-14   Ash A
03-Dec-14   Ash AA
04-Dec-14   Rob BB
05-Dec-14   Rob BB
06-Dec-14   Charly  A
07-Dec-14   Charly  AA

我只是写一个 sql 查询,它给我日期/名称/评级,其中评级在日期之间发生了变化。更准确地说,我想知道一段时间内哪些名字的评级变化是什么时候发生的。

非常感谢。

【问题讨论】:

  • 我认为我们必须根据评级维护历史记录表
  • 这对于“简单的 SQL 查询”是不可能的,因为简单的 SQL 无法在行之间进行比较。您需要光标或程序来执行此操作。

标签: mysql compare


【解决方案1】:

最简单的方法是使用变量枚举行然后聚合:

select name, rating, min(date) as firstdate, maxdate(lastdate)
from (select t.*,
             (@grp := if(@nr = concat_ws(':', name, rating), @grp,
                        if(@nr := concat_ws(':', name, rating), @grp + 1, @grp + 1)
                        )
             ) as grp
      from table t cross join
           (select @grp := 0, @nr := '') params
      order by name, date
     ) t
group by name, grp, rating;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多