[英]Doctrine ORDER BY column but DISTINCT on another column
似乎無法圍繞我正在嘗試為我正在開發的監控系統執行的 Doctrine 查詢。 我的底層數據庫是 SQLite。
我的表相當簡單:
CREATE TABLE disk_space_usage (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
disk_name VARCHAR(255) NOT NULL,
size INTEGER NOT NULL,
free INTEGER NOT NULL,
d_profile DATETIME NOT NULL --(DC2Type:datetime_immutable),
site_id INTEGER NOT NULL
)
每次從數據收集系統導入時,我們都會為每個“site_id”創建多個新記錄。 “site_id”的每組記錄將具有相同的“d_profile”值。
我想查詢 Doctrine 以獲取給定“site_id”可用的最新記錄集。
例如,假設“site_id”12345 有 5 個磁盤,“d1”、“d2”、“d3”、“d4”和“d5”,並且此導入已連續運行 100 天。 將有 500 條與“site_id”12345 相關的記錄。我想獲得最新的 5 條記錄。
但是,磁盤的數量會因站點而異,並且隨着磁盤的啟用和停用,對於任何給定站點可能會有所不同。 此外,無法保證導入每天都會運行,因此我需要獲取該站點的最新記錄集,無論日期和磁盤數量如何。
我的查詢目前看起來像這樣:
return $this->createQueryBuilder('dsu')
->select()
->distinct()
->where('dsu.site = :customer')
->groupBy('dsu.diskName')
->orderBy('dsu.dProfile', 'DESC')
->setParameter('customer', $customerSite)
->getQuery()
->getResult();
但是,雖然這會為此站點返回一組磁盤,但它們是最舊的記錄,而不是最近的記錄。
任何和所有的幫助表示贊賞! :)
米
我認為這應該可以解決您的問題。
distinc()
不是必需的並且會失敗,因為每個條目的某些字段是不同的。
我指定要選擇的數據只有具有相同值的字段。
要了解最新情況,我使用MAX()
來選擇dProfil
。
groupBy()
將使您獲得唯一/不同的結果。
然后返回一個標量結果(數組而不是對象)。
return $this->createQueryBuilder("disque")
->select("disque.id, disque.diskName, disque.size, disque.free, MAX(disque.dProfile) AS dProfile")
->andWhere("disque.site = :customer")
->groupBy("disque.diskName")
->orderBy("disque.dProfile", "DESC")
->setParameter('customer', $customerSite)
->getQuery()
->getScalarResult();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.