我的数据如下:
ID Name Data
1 Joe ["Mary","Joe"]
2 Mary ["Sarah","Mary","Mary"]
3 Bill ["Bill","Joe"]
4 James ["James","James","James"]
我想编写一个查询,该查询从数组中选择LAST元素,这不等于Name字段。例如,我希望查询返回以下结果:
ID Name Last
1 Joe Mary
2 Mary Sarah
3 Bill Joe
4 James (NULL)
我正在接近-我可以使用以下查询选择最后一个元素:
SELECT ID, Name,
(Data::json->(json_array_length(Data::json)-1))::text AS Last
FROM table;
ID Name Last
1 Joe Joe
2 Mary Mary
3 Bill Joe
4 James James
但是,我还需要一个级别-评估最后一个项目,如果它与名称字段相同,则尝试倒数第二个字段,依此类推。
任何帮助或指针将不胜感激!
json
在Postgres 9.3中在9.3版中很难做到这一点,因为缺少有用的功能。
嵌套LEFT JOIN LATERAL
(干净且符合标准),将双引号从json
铸造后修剪到text
。请参阅下面的链接。
SELECT DISTINCT ON (1)
t.id, t.name, d.last
FROM tbl t
LEFT JOIN LATERAL (
SELECT ('[' || d::text || ']')::json->>0 AS last
FROM json_array_elements(t.data) d
) d ON d.last <> t.name
ORDER BY 1, row_number() OVER () DESC;
尽管这可行,但我从未见过失败,但未嵌套元素的顺序取决于未记录的行为。见下面的链接!使用@pozs在注释中提供的表达式
改进了从json
到的转换。仍然有点破旧,但应该是安全的。text
SELECT DISTINCT ON (1)
id, name, NULLIF(last, name) AS last
FROM (
SELECT t.id, t.name
,('[' || json_array_elements(t.data)::text || ']')::json->>0 AS last
, row_number() OVER () AS rn
FROM tbl t
) sub
ORDER BY 1, (last = name), rn DESC;
SELECT
(非标准)。rn
并行附加行号()(更可靠)。text
上面的样子。(last = name)
对ORDER BY
匹配的名称进行最后排序(但在NULL之前)。因此,仅当没有其他名称可用时,才选择匹配的名称。下面的最后一个链接。在SELECT
列表中,NULLIF
将匹配的名称替换为NULL
,得到与上述相同的结果。SQL提琴。
json
或jsonb
在Postgres 9.4中第9.4页提供了所有必要的改进:
SELECT DISTINCT ON (1)
t.id, t.name, d.last
FROM tbl t
LEFT JOIN LATERAL json_array_elements_text(data) WITH ORDINALITY d(last, rn)
ON d.last <> t.name
ORDER BY d.rn DESC;
使用jsonb_array_elements_text()
了jsonb
。其他都一样。
手册中的json /jsonb函数
问题内容: 嘿,我在PostgreSql中有2个表: 和一些数据: 文件: 更新: 因此,所有更新都指向同一文档,但是所有更新的日期都不同。 我想做的是从文档表中进行选择,但还要包括基于日期的最新更新。 这样的查询应如何显示?这是我目前拥有的,但我列出的是所有更新,而不是我需要的最新更新: 包括; 我在查询中需要这个的原因是我想按更新模板中的日期排序! 编辑:此脚本已大大简化,因此我应该能够创建一
问题内容: 假设我有一个数组,我想随机选择一个元素。 最简单的方法是什么? 明显的方法是。但是也许有红宝石之类的东西?或者如果不能通过扩展创建这种方法? 问题答案: Swift 4.2及更高版本 推荐的新方法是Collection协议的内置方法:。它返回一个可选参数以避免我以前假设的空情况。 如果不创建数组并且不能保证count> 0,则应执行以下操作: Swift 4.1及以下 只是为了回答您的
假设我有一个数组,我想随机选择一个元素。 最简单的方法是什么? 最明显的方法是数组[随机索引]。但可能有类似ruby的数组。示例 ?或者,如果不是,那么可以使用扩展创建这样的方法吗?
问题内容: 我正在寻找从整数数组中随机选择数字的解决方案。 例如我有一个数组,如何随机选择一个数字? 问题答案:
每次运行代码时,我都需要从下面的示例json中选择任意随机值。我在空手道中怎样才能做到这一点呢?我需要得到任何随机值,并在另一个功能文件中使用。
因此,我要在Postgresql中解决这个问题,对于用户提供的给定数量的classId,我必须向他返回所述类的公共属性。 我有三个表来表示模型(一个类有多个属性,一个属性可以在多个类中) 表类: 表格属性: 最后表类属性 因此,用户给了我一个带有classId的数组,我必须向他返回所有类的所有公共属性(如我前面所说) 到目前为止,我只能用以下代码返回所有类的每个属性: 你可以看到的ID是Guid,