0

你好,抱歉我的英语不好。

我需要 mysql 查询方面的帮助

我有名为 mytable 的表,包括以下列

  1. id 列(自动递增)。
  2. 时间列(时间戳)。
  3. 数据列。

我需要按天和每天的数据分组数据,但每天的数据不得超过 3 行,每天的剩余行数,并且所有组数不得超过 9 组作为限制

(mytable)
id | time      | data
----------------------
1 | 1366553067 | data1
2 | 1366546958 | data2
3 | 1366546951 | data3
4 | 1366546953 | data4
5 | 1366546931 | data5
6 | 1366545926 | data6
7 | 1366564550 | data7
8 | 1366548683 | data8
----------------------
  • 注意://顶部的时间戳不正确。

我需要结果看起来像这张表。

(the result table)
time              | data  | count of remains row
-----------------------------------------------
april 12 2013     | data1 | 3
april 12 2013     | data2 | 3 // group one 
april 12 2013     | data3 | 3

april 13 2013     | data7 | 0 // group two 

april 14 2013     | data8 | 0 // group three 
------------------------------------------------

我应该在查询中写什么!?

我会很高兴得到任何帮助。

4

1 回答 1

0

以下查询(未经测试)提供类似于输出示例的结果:

SELECT time, data, IF(totalrows.total > 3, totalrows.total - 3, 0) AS remains
FROM (SELECT numbered.*
     FROM    SELECT ordered.*,
                 IF (id = @prev,
                     @n := @n + 1,
                     @n := 1 AND @prev := id) as position
            FROM (SELECT mytable.* ORDER BY time) AS ordered
            JOIN (SELECT @n := 0, @prev := id) AS setup)
            AS   numbered
     WHERE  numbered.position < 4)
     AS     top3
INNER JOIN (SELECT time, count(*) as total FROM mytable GROUP BY time) AS totalrows
ON top3.time = totalrows.time
于 2013-04-21T17:28:41.837 回答