gpt4 book ai didi

mysql:查找最新的非空值

转载 作者:行者123 更新时间:2023-11-29 00:07:41 25 4
gpt4 key购买 nike

我有一个包含 100 个字段的大表。每行都有时间戳。我想为所有列找到最新的非空值。我正在使用 MySql 5.6 InnoDB

例如

create table tester(
pub_id int,
pub_name varchar(20),
pub_city varchar(20),
country varchar(20),
no_of_branch varchar(20),
estd datetime
);


insert into tester (pub_id, pub_name, pub_city, country, estd)
values
(1, 'a', 'xyz', 'abcity' , 'a', '1970-01-01 00:00:01'),
(2, 'a', 'xyz', '' , 'a', '1971-01-01 00:00:01'),
(3, 'a', 'xyz', 'abcity1', 'b', '1972-01-01 00:00:01'),
(4, 'a', 'xyz', '' , 'a', '1973-01-01 00:00:01'),
(5, 'a', 'xyz', 'abcity2', '' , '1974-01-01 00:00:01'),
(6, 'b', 'lmn', 'abcity' , 'a', '1974-01-01 00:00:01'),
(7, 'b', 'xyz', '' , 'a', '1975-01-01 00:00:01'),
(8, 'b', 'sdf', 'abcity1', 'b', '1976-01-01 00:00:01'),
(9, 'b', '' , '' , 'a', '1977-01-01 00:00:01'),
(10, 'b', '' , 'abcity2', '' , '1978-01-01 00:00:01');

我想查询会给我:

'a', 'xyz', 'abcity2', 'a'
'b', 'sdf', 'abcity2', 'b'

我不想使用这样的查询,即我分别为表的每一列找到空值,然后进行连接,因为考虑到我的实际表有 100 列,这将是一项非常繁琐的任务。

我已经为我们几个人的过去寻找解决方案,但一无所获。任何帮助将不胜感激。

谢谢

最佳答案

这可能是您正在寻找的“棘手”方式。

首先创建一个孪生表 (tester2) 来接收聚合数据。这个新表必须在 pub_name 和您要聚合的所有列上有一个主键。然后执行 INSERT INTO ON DUPLICATE KEY UPDATE。此查询基本上会重建 tester 表,但不会重复且包含聚合数据。事实上是这样的:

insert into tester2 (pub_name, pub_city, country, no_of_branch)
select pub_name, pub_city, country, no_of_branch FROM tester order by estd desc
on duplicate key
update
pub_city = coalesce(tester2.pub_city,tester.pub_city),
country = coalesce(tester2.country,tester.country),
no_of_branch = coalesce(tester2.no_of_branch,tester.no_of_branch)

tester2 的内容将是:

PUB_NAME   PUB_CITY   COUNTRY   NO_OF_BRANCH
a xyz abcity2 a
b sdf abcity2 a

看看DB Fiddle .

注意:我假设您指的是真正的 NULL 值,而不是像您提供的示例那样的空字符串。

关于mysql:查找最新的非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26744841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com