我有以下查询为单个ID生成多个记录。我试图弄清楚如何将这些多个记录合并到一个记录中:
SELECT DISTINCT id, gender, dateofbirth, city, state, zip
FROM t
这可能会给我以下结果集:
1, M, 2000-01-01, dallas, tx, 12345
1, M, 2000-01-01, NULL, NULL, NULL
我想要的是一条记录:
1, M, 2000-01-01, dallas, tx, 12345
当第二行具有不同的数据时会发生类似的情况:
1, M, 2000-01-01, dallas, tx, 12345
1, M, 2000-01-01, houston, tx, 67890
在这种情况下,我只想选择其中一条记录而忽略另一条记录,以便每个id只有一条记录。
有没有办法在PostgreSQL中执行此操作?我试过联合无济于事,并且想知道是否有办法解决这个问题。
答案 0 :(得分:1)
以下查询似乎正在运行,至少对于您的示例数据而言。看看下面的小提琴演示。我使用MySQL,因为Fiddle倾向于打破任何其他数据库类型。
SELECT t1.*
FROM yourTable t1
INNER JOIN
(
SELECT id, MAX(city || ', ' || state || ', ' || zip) AS location
FROM yourTable
GROUP BY id
) t2
ON t1.id = t2.id AND
t1.city || ', ' || t1.state || ', ' || t1.zip = t2.location
我使用的技巧是将city,state和zip连接成一个字符串,然后选择id
组值的最大值。假设不可能以某种方式从两个不同的地址形成相同的字符串,这将起作用。我认为这适用于您的美国地址格式。
答案 1 :(得分:0)
@posts
上述查询将始终返回一个id的记录。如果city有多个值,一个值为value,另一个值为null,则查询将获取具有city值的记录。