簡體   English   中英

教義 ORDER BY 列但 DISTINCT 在另一列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM