mysql查询日志表中值的变化

标签 mysql

我有一个这样的表:

Index , PersonID  , ItemCount         , UnixTimeStamp
1     , 1         , 1             , 1296000000
2     , 1         , 2             , 1296000100
3     , 2         , 4             , 1296003230
4     , 2         , 6             , 1296093949
5     , 1         , 0             , 1296093295

时间和指数总是在上升。它基本上是一个记录表,用于在每次更改时记录项目计数。我像这样获得每个人的最新 ItemCount:

SELECT *
FROM table a
INNER JOIN
(
 SELECT MAX(index) as i
 FROM table
 GROUP BY PersonID) b
ON a.index = b.i;

我想要做的是获取每个 PersonID 的最新记录,该记录比每个 Person ID 的最新记录至少早 24 小时。然后我想计算这两者之间的 ItemCount 差异,以获得过去 24 小时内每个人的 itemcount 的变化:

personID ChangeInItemCountOverAtLeast24Hours

    1        3
    2        -11
    3        6

我有点不知道下一步该做什么。如何根据各行的最新调整时间戳加入另一个项目计数?

最佳答案

您可能希望添加一些复合索引来帮助查询,这取决于(除其他外)读:写比率。

SELECT lsG.PersonID,
  lsG.CrItemCount,
  lsI.ItemCount,
  IF(lsI.ItemCount IS NULL, 0, lsG.CrItemCount  - lsI.ItemCount) Change
FROM (
  SELECT cr.PersonID, MAX(ls.index) MaxLsIndex, cr.ItemCount CrItemCount
  FROM (
    SELECT crI.Index, crI.PersonID, crI.ItemCount, crI.UnixTimeStamp
    FROM table crI JOIN (
      SELECT PersonID, MAX(index) MaxIndex
      FROM table
      GROUP BY PersonID
    ) crG ON crI.Index = crG.MaxIndex
  ) cr LEFT JOIN table ls ON cr.PersonID = ls.PersonID
        AND ls.UnixTimeStamp < (cr.UnixTimeStamp - 86400 /*24 hours*/)
  GROUP BY cr.PersonID
) lsG LEFT JOIN table lsI ON lsG.MaxLsIndex IS NOT NULL
        AND lsG.MaxLsIndex = lsI.index

我将表别名命名为:

  • cr = 当前
  • ls = 最后(最近记录之前 - 24 小时)
  • 后缀 G = Groupped
  • 后缀 I = Item(组 MaxID 找到的记录本身)

关于mysql查询日志表中值的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4954123/

相关文章:

mysql - 如何使用 "."作为千位分隔符和 ","作为小数点分隔符格式化数字?

mysql - 索引的一部分可以用在 MySQL 中具有 AND 的查询中吗?

mysql - 有没有办法通过 "WITH"语句获得输出?

php - PHP/MySQL 中的短代码/标签

mysql - .htaccess 允许来自 MySQL DB 的 IP

php - 来自数据库的 session 详细信息的用户名

Mysql - 同一个表从另一列复制日期列但减少 3 天

mysql - 使用 wireshark 监听对 mysql 的请求。 127.0.0.1 没问题,但对 localhost 的请求会被忽略

mysql - 为每个 'quantity' 选择一行

用于检查 MySQL TABLE LOCK 状态的 Php 脚本