我们目前正在将我们的数据库后端从Firebird迁移到PostgreSQL。我们使用NHibernate作为ORM,尽管SQL有一些差异,但转换已经非常轻松。PostgreSQL - select distinct - 按字段顺序不返回select
我们有一个查询,我们使用NHibernate.CreateSQLQuery执行,因为我们自己构建SQL。该查询返回一个字符串列表,其中包含最近访问过的用户ID中最多5个忍者名称。
这在Firebird中没有问题,使用以下SQL;
SELECT FIRST 5 DISTINCT NI.NINJA_NAME
FROM NINJA_ACCESS NA
INNER JOIN NINJAS NI ON NA.NINJA_ID = NI.NINJA_ID
WHERE NA.USER_ID = 1
ORDER BY NI.NINJA_ACCESS_DATE DESC
返回字符串命令(通过访问日期倒序排列)名单。
现在在PostgreSQL中,我们遇到了这个简单查询的问题;
SELECT DISTINCT ON (NI.NINJA_NAME) NI.NINJA_NAME
FROM NINJA_ACCESS NA
INNER JOIN NINJAS NI ON NA.NINJA_ID = NI.NINJA_ID
WHERE NA.USER_ID = 1
ORDER BY NI.NINJA_ACCESS_DATE DESC
LIMIT 5
看来,我们不能在未包括在选择一个单独的列正在执行排序返回数据的一个单一的“不同的”列中。除非我们在select中包含Access_Date列,否则上述SQL中的任何变体都不起作用。
任何想法如何解决这个简单的查询在PostgreSQL?
旁注:这是忍者管理系统的一个重要查询,忍者坚持它的工作!
也许会重写为GROUP BY? – Kenaniah
对于忍者查询 – MurifoX