我想选择过去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 | |
+-----------------+------------------+------+-----+---------+-------+
答案 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
)