我有一个包含Y-m-d H:i:s
格式的日期时间的created_at
列的数据库。每周间隔查询数据库
最新的日期时间条目是2011-09-28 00:10:02
。
我需要查询相对于最新的日期时间条目。
- 查询中的第一个值应该是最新的日期时间条目。
- 查询中的第二个值应该是距离第一个值最近7天的条目。
- 第三个值应该是距第二个值最近7天的条目。
- REPEAT#3。
我所说的“最近7天”是什么:
下面是日期,我想要的间隔为一周,以秒为一个星期604800
秒。
7从第一天的值等于1316578202(1317183002-604800)
最接近1316578202(7天)的值是... 1316571974
unix timestamp | Y-m-d H:i:s
1317183002 | 2011-09-28 00:10:02 -> appear in query (first value)
13171| 2011-09-27 01:27:13
1317009182 | 2011-09-25 23:53:02
1316916554 | 2011-09-24 22:09:14
1316836656 | 2011-09-23 23:57:36
1316745220 | 2011-09-22 22:33:40
1316659915 | 2011-09-21 22:51:55
1316571974 | 2011-09-20 22:26:14 -> closest to 7 days from 1317183002 (first value)
1316499187 | 2011-09-20 02:13:07
1316064243 | 2011-09-15 01:24:03
1315967707 | 2011-09-13 22:35:07 -> closest to 7 days from 1316571974 (second value)
1315881414 | 2011-09-12 22:36:54
1315794048 | 2011-09-11 22:20:48
1315715786 | 2011-09-11 00:36:26
1315622142 | 2011-09-09 22:35:42
我真的很感激任何帮助,我一直无法通过mysql来做到这一点,并没有任何网上资源似乎处理这样的相对日期操作。我希望查询足够模块化,以便能够更改每周,每月或每年的时间间隔。提前致谢!
回答#1回复:
SELECT
UNIX_TIMESTAMP(created_at)
AS unix_timestamp,
(
SELECT MIN(UNIX_TIMESTAMP(created_at))
FROM my_table
WHERE created_at >=
(
SELECT max(created_at) - 7
FROM my_table
)
)
AS `random_1`,
(
SELECT MIN(UNIX_TIMESTAMP(created_at))
FROM my_table
WHERE created_at >=
(
SELECT MAX(created_at) - 14
FROM my_table
)
)
AS `random_2`
FROM my_table
WHERE created_at =
(
SELECT MAX(created_at)
FROM my_table
)
返回:
unix_timestamp | random_1 | random_2
1317183002 | 1317183002 | 1317183002
回答#2回复:
结果集:
这是结果为每年间隔设置:
id | created_at | period_index | period_timestamp
267 | 2010-09-27 22:57:05 | 0 | 1317183002
1 | 2009-12-10 15:08:00 | 1 | 1285554786
我渴望这样的结果:
id | created_at | period_index | period_timestamp
626 | 2011-09-28 00:10:02 | 0 | 0
267 | 2010-09-27 22:57:05 | 1 | 1317183002
我希望这更有意义。
这真是太神奇了,真的很感谢你。他们有两个问题,每个查询返回第一个条目(id = 1),但它没有返回最新条目。除此之外,迄今为止这很有效。 – ThomasReggi
@ThomasReggi - 你能更准确地描述问题吗?我不明白你的意思是什么,当你说“它返回每个查询的第一个条目(id = 1),它没有返回最新的条目”。 – Lee
我在问题帖子的底部有更详细的解释。 – ThomasReggi