[似乎无法绕过我要为正在使用的监视系统执行的主义查询。我的基础数据库是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();
但是,尽管这为该站点返回了一组磁盘,但它们是最旧的而不是最新的记录。
任何人和所有帮助表示赞赏! :)
M
[似乎无法绕过我要为正在使用的监视系统执行的主义查询。我的基础数据库是SQLite。我的表非常简单:CREATE TABLE ...
我认为这应该可以解决您的问题。distinc()
不是必需的,并且会失败,因为每个输入的某些字段都不同。