mysql - 如何使用mysql查找第一个非空列名

标签 mysql sql

我有一张表,上面有一年中所有月份的电话账单。这是表的结构:

CREATE TABLE IF NOT EXISTS `sct_conso_2015` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `January` decimal(10,2) DEFAULT NULL,
  `February` decimal(10,2) DEFAULT NULL,
  `March` decimal(10,2) DEFAULT NULL,
  `April` decimal(10,2) DEFAULT NULL,
  `May` decimal(10,2) DEFAULT NULL,
  `June` decimal(10,2) DEFAULT NULL,
  `July` decimal(10,2) DEFAULT NULL,
  `August` decimal(10,2) DEFAULT NULL,
  `September` decimal(10,2) DEFAULT NULL,
  `October` decimal(10,2) DEFAULT NULL,
  `November` decimal(10,2) DEFAULT NULL,
  `December` decimal(10,2) DEFAULT NULL,
  `type` enum('pabx','gsm') NOT NULL,
  `id_user` int(11) NOT NULL,
  `number` varchar(9) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `number` (`number`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1

每个月,当我收到每个号码的账单时,我都会将它们加载到数据库中,月复一月。 在我的应用程序中,我需要获取最后一个月的金额不为空的信息。我已经写了这个查询,但它似乎是错误的,我不明白为什么:

SELECT 
    CASE 
        WHEN December IS NOT NULL THEN 'December'  
        WHEN November IS NOT NULL THEN 'November' 
        WHEN October IS NOT NULL THEN 'October' 
        WHEN September IS NOT NULL THEN 'September' 
        WHEN August IS NOT NULL THEN 'August'
        ELSE ''  
    END as 'Month' 
FROM sct_conso_2015 LIMIT 1

这是为了准备好最后一个月的账单。就我而言,我得到的是“九月”月份,但十月已经在数据库中。我的查询有什么问题?

最佳答案

您的查询很好,但它总是从表的第一行获取最后一个非空值。假设您需要知道最后输入的记录中金额不为空的最后一个月,那么您必须对 SQL 查询进行以下更改:

SELECT 
CASE 
    WHEN December IS NOT NULL THEN 'December'  
    WHEN November IS NOT NULL THEN 'November' 
    WHEN October IS NOT NULL THEN 'October' 
    WHEN September IS NOT NULL THEN 'September' 
    WHEN August IS NOT NULL THEN 'August'
    ELSE ''  
END as 'Month' 
FROM (SELECT * FROM sct_conso_2015 ORDER BY id DESC LIMIT 1 ) as LastRow 
LIMIT 1

关于mysql - 如何使用mysql查找第一个非空列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34038083/

相关文章:

mysql - 搜索多个值 - SQL

sql - 如何使用另一个表中记录按 id 匹配的值更新表中的所有记录?

SQL 内连接并过滤结果

mysql - 如何在 MySQL 中表示 GUID?

php - 从数据库中选择数据并在 MYSQL 中创建新列

mysql - 从多个表中添加总计

php - 选择表的最后受影响的行以立即选择插入到另一个表中

mysql - 更改mySql数据库表中的日期格式

php - 使用 PHP 从 SQL 数据库传递选择值

sql - Postgres 每天的首次用户