有一个人员关联地址表,分别有身份证号,姓名,地址名称,数据来源,登记时间,怎样求出每个人的地址,关联次数,数据来源集合 其中数据来源集合要求用数据来源和更新时间拼起来进行集合,并且要求数据来源集合中按照更新时间进行排序 要求用hive实现
SELECT id_card, name, address_name, count(*) as association_count,
collect_set(concat(data_source, '-', register_time)) as data_sources
FROM person_address
GROUP BY id_card, name, address_name
ORDER BY id_card;
你试试呢,不知道你的表名和字段,全用中文代替
SELECT
身份证号,
姓名,
地址名称,
count( * ) AS 关联次数,
sort_array ( collect_set ( concat_ws( ‘ |’, 数据来源, 登记时间 ) ) ) AS 数据来源集合
FROM
人员关联地址表
GROUP BY
身份证号,
姓名,
地址名称;
不知道你这个问题是否已经解决, 如果还没有解决的话:为了实现这个查询,你可以按如下步骤编写Hive的SQL语句:
1. 首先,创建一个名为person_address的Hive表,使用提供的表结构和示例数据。
```sql
CREATE TABLE person_address (
id_card STRING,
name STRING,
address_name STRING,
data_source STRING,
register_time STRING
);
INSERT INTO TABLE person_address VALUES
('1234567890', 'John Doe', 'Address 1', 'Source A', '2022-01-01'),
('1234567890', 'John Doe', 'Address 2', 'Source B', '2022-02-01'),
('0987654321', 'Jane Doe', 'Address 3', 'Source A', '2022-03-01'),
('0987654321', 'Jane Doe', 'Address 4', 'Source B', '2022-04-01'),
('0987654321', 'Jane Doe', 'Address 5', 'Source A', '2022-05-01');
SELECT id_card, name, count(*) as num_associations,
concat_ws(',', collect_set(concat(data_source, ' ', register_time))) as data_source_list
FROM person_address
GROUP BY id_card, name;
这个查询使用了GROUP BY
子句对id_card和name进行分组,并使用count(*)
函数计算出每个组的关联次数。同时使用collect_set
函数和concat
函数将data_source和register_time拼接起来,形成一个数据来源集合。
希望这个解决方案对你有帮助!如果你还有其他问题,请随时提问。 ```