MySQL - 选择最近5天插入的最后数据,跳过缺失的记录数天

时间:2013-12-26 15:15:19

标签: mysql

我想选择过去5天内插入的数据,如果当天缺少行,则继续前一天,但总是必须返回过去5天的行。

我想要匹配的列是DATETIME列

我尝试过使用此查询

select * from `thum_{ROH}`  where date >= NOW() - INTERVAL 5 DAY;

现在这是2013-12-24至2013-12-22的返回数据,因为2013-12-25和2013-12-26的数据 不可用。

如何修改查询以使其返回最近5天的数据而不管缺少哪些行。所以在这种情况下,它将返回插入

的数据
2013-12-24
2013-12-23
2013-12-22
2013-12-19
2013-12-12

上述日期之间缺少的日期根本没有与之关联的行,因此不会返回。

我也尝试过使用

select distinct(date(date)), power from `thum_{ROH}` limit 5;

但是这只会在特定日期选择一些值,而在其他日期会跳过。我的意思是每天有大约30行或更多行存在,因此上述查询每天只返回2或3行。

我希望我的问题有道理。我一直试图找到一个没有任何成功的解决方案。请提供有关如何实现此目的的任何建议。我将不胜感激任何帮助。

提前致谢, MAXX

修改

以下是相关的表格结构。

+-----------------+------------------+------+-----+---------+-------+
| Field           | Type             | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+---------+-------+
| thumType        | int(11)          | NO   | PRI | 0       |       |
| timestamp       | int(10) unsigned | NO   | PRI | 0       |       |
| rune            | char(15)         | YES  |     | NULL    |       |
| date            | datetime         | YES  |     | NULL    |       |
| destruction     | decimal(15,2)    | YES  |     | NULL    |       |
| restoration     | decimal(15,2)    | YES  |     | NULL    |       |
| conjuration     | decimal(15,2)    | YES  |     | NULL    |       |
| alteration      | decimal(15,2)    | YES  |     | NULL    |       |
| illusion        | int(10) unsigned | YES  |     | NULL    |       |
| power           | decimal(15,2)    | YES  |     | NULL    |       |
| magicka         | decimal(15,2)    | YES  |     | NULL    |       |
| health          | decimal(15,2)    | YES  |     | NULL    |       |
+-----------------+------------------+------+-----+---------+-------+

2 个答案:

答案 0 :(得分:2)

您可以使用join

执行此操作
select t.*
from `thum_{ROH}` t join
      (select distinct date
       from `thum_{ROH}`
       order by date desc
       limit 5
      ) as date5
      on t.date = date5.date;

EIDT:

如果我们假设没有时间组件,则上述情况有效。

我们可以通过以下方式解决这个问题:

select t.*
from `thum_{ROH}` t join
      (select distinct date(date) as thedate
       from `thum_{ROH}`
       order by date desc
       limit 5
      ) as date5
      on date(t.date) = date5.thedate;

答案 1 :(得分:0)

假设'date'列的类型为date,那么我们可以使用子查询来解决这个问题,以获取5个最近的非空白日期,然后只选择那些日期的行。

SELECT *
FROM tablename
WHERE date IN (
    SELECT distinct date FROM tablename ORDER BY date DESC LIMIT 5
)