我已經生成了一個包含三十天數據的數據集。我試圖緩解在過去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