2012-03-16 43 views
0

我已經搜索論壇的解決方案,但這些示例對我來說沒有意義。我知道我的語法是不正確的,但這是我想要通過的想法。在mysql表/視圖中的特定多行上執行布爾邏輯

假設查詢在2012-03-09 24:00:00運行。 (我想我正確地編輯出的僞值)

task_status是一個視圖,運行=(開始>結束),跑到=((NOW() - 結束)< 10H)

select * from task_status; 
+----------------+---------------------+---------------------+---------+------+ 
| task   | began    | ended    | running | ran | 
+----------------+---------------------+---------------------+---------+------+ 
| MIRRORS_SPLIT | 2012-03-09 19:15:48 | 2012-03-09 19:15:51 |  0 | 1 | 
| NETWORK_BACKUP | 2012-03-09 19:25:01 | 2012-03-09 19:23:41 |  0 | 1 | 
| TAPE_BACKUP | 2012-03-09 19:26:01 | 2012-03-09 23:16:32 |  0 | 1 | 
+----------------+---------------------+---------------------+---------+------+ 

我有創建BACKUPS行的問題,began=(MIN(NETWORK_BACKUP.began, TAPE_BACKUP.began)end=(MAX(NETWORK_BACKUP.end, TAPE_BACKUP.end)。跑步和跑步應該正確評估,對吧?

我想添加一行導致這樣:

| BACKUPS  | 2012-03-09 19:25:01 | 2012-03-09 23:16:32 |  0 | 1 | 

任何幫助將不勝感激。

回答

0

謝謝JustDanyul,這讓我在正確的軌道上。

這是我最終使用的。

SELECT 0 = 
    (
    SELECT 
    (
    (SELECT ran FROM expect.task_status WHERE task='NETWORK_BACKUP') 
    + 
    (SELECT ran FROM expect.task_status WHERE task='TAPE_BACKUP') 
) 
) 
2

您使用MIN()和MAX()的方式似乎是錯誤的,請記住,這些是聚合函數。他們處理由您作爲參數傳遞的列的內容定義的一組值。

你似乎希望他們通過傳遞兩個參數來告訴你兩個不同行的開始和結束值的MIN或MAX值。 (除非我不正確地理解你的僞語法)。

你不是尋找類似

SELECT 'BACKUPS', MIN(began), MAX(ended) 
FROM task_status WHERE task = 'NETWORK_BACKUP' OR task = 'TAPE_BACKUP' 
GROUP BY task