Select

SQLITE:僅當列的所有值都相同時才選擇行ID

  • March 3, 2019

我有一張桌子,其中不止一行具有相同ttid的 . 我想ttid根據狀態列獲取行是done.

tb  tbid    ttid    status
-----------------------------
216 6   5   done
216 6   5   running
216 7   5   preparing
217 11  10  done
217 11  10  done
218 12  11  done
218 12  11  running
212 15  14  done
212 15  14  running
220 17  15  done
220 17  15  done

我只想有以下行:

tb      tbid    ttid    status
--------------------------------
217     11      10      done
220     17      15      done

我嘗試了以下查詢,但它給出了錯誤的資訊tb: 216,因為兩個不同的tbid.

select tb,tbid,tbid,status FROM tt 
status in ('done')

您能否幫助如何獲得預期的結果。

編輯

我不應該得到 ttid 5 的結果,因為它的狀態為“準備中”。只有當所有狀態都“完成”時,我才應該得到 ttids 結果。

要僅獲得兩次完成且未找到其他狀態的狀態:

SELECT tb,  tbid, ttid,status 
FROM  test t1
WHERE status = 'done'
AND NOT EXISTS(SELECT * FROM test t2 where t2.status != 'done' and t1.ttid = t2.ttid)
GROUP BY  tb,tbid,ttid,status
HAVING COUNT(*) > 1;

DB-小提琴

或者

SELECT ttid,status 
FROM test t1
WHERE status = 'done'  
AND NOT EXISTS(SELECT * FROM test t2 where t2.status != 'done' and t1.ttid = t2.ttid)
GROUP BY  ttid,status
HAVING COUNT(*) > 1;

DB-小提琴

通過或應用函式將其添加到組中的原因:

if tbor tbidcan be different for the same ‘done’ statusand the same ttid,你選擇哪一個?你選擇最小的,最大的,…?

如果這是真的並且沒有添加到group byor 函式中會發生什麼:

失敗的 DB-Fiddle

引用自:https://dba.stackexchange.com/questions/231049