我有一张表,上面有一年中所有月份的电话账单。这是表的结构:
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/