我有一张这样的桌子:

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;

我要做的是获取每个人ID的最新记录,该记录至少比每个人ID的最新记录早24小时。然后,我要计算这两个记录之间的项目计数差异,以获取过去24小时内每个人的项目计数的更改:
personID ChangeInItemCountOverAtLeast24Hours

    1        3
    2        -11
    3        6

我有点纠结于下一步该做什么如何根据各行的最新调整时间戳加入另一个itemcount?

最佳答案

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

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=分组
后缀I=项(组MaxID找到的记录本身)

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

10-10 03:42
查看更多