MySQL最小记录最多可加10000

时间:2016-10-29 20:31:23

标签: mysql sql

我有一个包含两列的MySQL表:takenOn(datetime)和count(int)。 count包含我已采取的步骤数。

我正在尝试编写一个查询,告诉我每天达到10,000步的目标的时间。

到目前为止,我有以下查询:

SET @runningTotal=0;
SELECT
    `Date`,
    DATE_FORMAT(MIN(takenOn), '%l:%i %p') AS `Time`,
    TotalCount
FROM
    (SELECT
        DATE(s.takenOn) AS `Date`,
        s.takenOn,
        s.`count`,
        @runningTotal := @runningTotal + s.`count` AS TotalCount
    FROM 
    (select * from step where DATE(takenOn) = '2016-10-29') s) temp
WHERE TotalCount >= 10000;

这有效,但当然只给我10月29日的MIN(takenOn)。如何扩展此查询以便为表格中的所有可能日期提供MIN(takenOn)

谢谢!

2 个答案:

答案 0 :(得分:2)

我假设你关心的步骤都在一天之内。你走在正确的轨道上。这是多天的代码:

SELECT `Date`, DATE_FORMAT(MIN(takenOn), '%l:%i %p') AS `Time`,
       MIN(TotalCount)
FROM (SELECT DATE(s.takenOn) AS `Date`,
             s.takenOn,
             s.`count`,
             (@runningTotal := if(@d = DATE(s.takenOn), @runningTotal + s.`count`,
                                  if(@d := DATE(s.takeOn), s.`count`, s.`count`)
                                  )
             ) AS TotalCount
      FROM step s CROSS JOIN
           (SELECT @runningTotal := 0, @d = '') params
      ORDER BY takenOn
     ) s
WHERE TotalCount >= 10000
GROUP BY `Date`;

请注意,所有变量赋值都在一个表达式中。这很重要,因为MySQL不保证SELECT中表达式的评估顺序。因此,如果您将分配分配到多个表达式,则无法保证代码可以正常工作。

答案 1 :(得分:0)

您可以使用Group By和Having子句来实现此目的,请参阅this example

SELECT
  sum(takenON),date
FROM
  step
GROUP BY
  day(date)
Having SUM(takenON)>150