我有一张桌子,我有一年中所有月份的电话费。这是表格的结构:
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
这是为了准备账单的最后一个月。在我的情况下,我得到月份'九月',但十月已经在数据库中。我的查询有什么问题?
答案 0 :(得分:0)
MySQL COALESCE()
函数返回列表的first non-NULL
值,如果没有非NULL值,则返回NULL。
SELECT COALESCE(December,November,October...) Month
FROM sct_conso_2015 LIMIT 1
答案 1 :(得分:0)
您的查询很好,但它总是从表的第一行获取最后一个非空值。假设您需要知道输入的最后一条记录的金额不为空的最后一个月,那么您必须对 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