我已经生成了一个包含三十天数据的数据集。我试图缓解在过去2天内出现的新数据元素,但在此之前的28天内没有出现。MySQL:在一个时间范围内获取结果,但不在另一个时间范围内
我运行一个PHP脚本来生成测试数据。 (PHP和MYSQL在测试时返回同一时间)
我对它运行以下查询。
结果被确实地返回半小时左右。然后,尽管我相信有匹配的记录,但运行此查询时不会返回任何匹配记录。
是否有任何明显的错误我在SQL中会导致这种明显的“漂移”发生?
关于该数据:
脚本每天都会产生一个“种族”。它使用10个“jokeys”的排名填充排名表。为了进行测试,脚本会在前两天内生成两次新的'joke',前10天内剩余的30天内相同。
结果预计:
2个jokeys谁在比赛中最近排名(在过去的两天,在之前的28个排不上)的名称。
的SQL:
SELECT *, FROM_UNIXTIME(`race_timestamp`) as ts FROM `rankings`
WHERE `race_venue` = UNHEX(MD5('someplace'))
AND `jokey` IN
(
SELECT `jokey`
FROM `rankings`
WHERE `race_timestamp`
BETWEEN # Get results for races between now and two days ago
UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 2 DAY)) # timestamp two days ago
AND
UNIX_TIMESTAMP() # time stamp now
)
AND
`jokey` NOT IN
(SELECT `jokey`
FROM `rankings`
WHERE `race_timestamp`
BETWEEN # Get results between 2 and 30 days ago
UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY)) # time stamp 30 days ago
AND
UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 2 DAY)) # time stamp 2 days ago
)
GROUP BY jockey;
希望有人能帮助!本
为了澄清,你希望在过去的两天里**只**的骑师,如果他们在之前的任何一天放置,他们不会出现在列表中? – Joseph 2010-06-04 13:37:04
现在确实删除'WHERE race_venue = UNHEX(MD5('someplace'))'更改结果集?除此之外,这可以使用连接而不是子选择来重做,这可能会使其更快/更易于理解,但我会在稍后发布信息。 – 2010-06-04 13:42:15
您是否已对您生成的数据进行了视觉检查,以确保您获得的数据是正确的? – 2010-06-04 13:54:43