我有這個糟糕的查詢,我使用IFNULL來確定結果集之前是否有結果和結果。結果集由一段時間決定,見5月5日至10日。這段時間在我的應用程序中可視化爲線圖。我想要在5月5日至5月10日期間前後的第一個結果,如果有任何(因此使用IFNULL),因爲我希望grahp的行是連續的。如果在可視化時間段之前出現結果,我需要從該點開始繪製線,與圖形區域相交,儘管它不在屏幕上。結果集之前和之後的MySql第一個結果
查看圖片以查看可視化示例。第一個圖形不包括可視化時間段之前和之後的測量結果(框表示實際顯示給用戶的圖形的區域),並且第二個圖形確實與Y軸相交,因爲在顯示的時間段之前有一個測量結果,並且之後。
現在到目前爲止好,我可怕的查詢工作。也就是說,如果我只想獲得一個實體的測量結果。但是現在我想要在一個查詢中獲得一組實體的結果,關於性能。更好的查詢一次以獲得200個實體的測量結果,而不是每個實體的查詢= 200次。所以我想我把查詢從WHERE Entity.Id=1
更改爲WHERE Entity.Id IN (1, 2, 3, 4)
。現在的問題是,包括圖表前後測量的週期是一般化的,而不是根據實體及其測量結果進行評估。
下面是(在我的特定情況下,奶牛)每個實體的運作查詢
SELECT
*
FROM
`measurements`
WHERE
`CowId` = 23 AND `CellCount` >= 0
AND (`Date` BETWEEN IFNULL((SELECT
MAX(`Date`)
FROM
`measurements`
WHERE
`CowId` = 23
AND `Date` < '2014-03-28 00:00:00'),
'2014-03-28 00:00:00') AND IFNULL((SELECT
MIN(`Date`)
FROM
`measurements`
WHERE
`CowId` = 23
AND `Date` > '2014-04-11 23:59:59'),
'2014-04-11 23:59:59'))
ORDER BY `CowId` ASC , `Date` ASC
這裏是我試圖查詢所有奶牛和它們的測量在一個查詢
SELECT
*
FROM
`measurements`
WHERE
`CowId` IN (23 , 22, 19, 18, 17, 16, 15, 20, 21, 14)
AND `CellCount` >= 0
AND (`Date` BETWEEN IFNULL((SELECT
MAX(`Date`)
FROM
`measurements`
WHERE
`CowId` IN (23 , 22, 19, 18, 17, 16, 15, 20, 21, 14)
AND `Date` < '2014-03-28 00:00:00'),
'2014-03-28 00:00:00') AND IFNULL((SELECT
MIN(`Date`)
FROM
`measurements`
WHERE
`CowId` IN (23 , 22, 19, 18, 17, 16, 15, 20, 21, 14)
AND `Date` > '2014-04-11 23:59:59'),
'2014-04-11 23:59:59'))
ORDER BY `CowId` ASC , `Date` ASC
哦鹿,這是我在SO上發佈的一個可怕的問題。希望我明確自己。 謝謝!
Wowwie!複製粘貼,它的工作。我現在沒有可以與這樣的查詢相關聯。非常感謝您的洞察力,特別是爲了使這個查詢工作的努力。你爲我節省了頭痛和我的一天! –
祝您有美好的一天! –