Mysql 如何选择前面直接相关的行并求和
我有一张应付账款的表格 我想选择其中的所有数据 如果sd_doc为空,则检索此发票价格,因为它是空的 但是,如果sd_doc不为NULL,则检索所有先前为NULL的sd_doc,然后将所有这些行的价格相加 注意:我想要的不是所有空sd_doc之前的空月份 我的表格和样本数据Mysql 如何选择前面直接相关的行并求和,mysql,sql,Mysql,Sql,我有一张应付账款的表格 我想选择其中的所有数据 如果sd_doc为空,则检索此发票价格,因为它是空的 但是,如果sd_doc不为NULL,则检索所有先前为NULL的sd_doc,然后将所有这些行的价格相加 注意:我想要的不是所有空sd_doc之前的空月份 我的表格和样本数据 CREATE TABLE IF NOT EXISTS `d_statistics_docs` ( `sd_id` int(11) NOT NULL AUTO_INCREMENT, `sd_pub` int(11) N
CREATE TABLE IF NOT EXISTS `d_statistics_docs` (
`sd_id` int(11) NOT NULL AUTO_INCREMENT,
`sd_pub` int(11) NOT NULL,
`sd_date` date NOT NULL,
`sd_doc` text NOT NULL,
`price` int(11) NOT NULL,
PRIMARY KEY (`sd_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
--
-- Dumping data for table `d_statistics_docs`
--
INSERT INTO `d_statistics_docs` (`sd_id`, `sd_pub`, `sd_date`, `sd_doc`, `price`) VALUES
(9, 256, '2013-03-01', 'scifiwallpaper1.jpg', 5),
(10, 256, '2013-04-01', 'scifiwallpaper1.jpg', 15),
(11, 256, '2013-05-01', '', 3),
(12, 256, '2013-06-01', 'scifiwallpaper1.jpg', 7),
(13, 256, '2013-07-01', '', 9),
(14, 256, '2013-08-01', '', 11),
(15, 256, '2013-09-01', 'scifiwallpaper1.jpg', 25);
我需要这样的结果
9 256 2013-03-01 scifiwallpaper1.jpg 5
10 256 2013-04-01 scifiwallpaper1.jpg 15
11 256 2013-05-01 3
12 256 2013-06-01 scifiwallpaper1.jpg 10 // total 7 + 3
13 256 2013-07-01 9
14 256 2013-08-01 11
15 256 2013-09-01 scifiwallpaper1.jpg 45 // total of 25+11+9
你说了空,但是你把SD_DOC设置为空格,所以我为它编程
Select
*
, Case
When d.SD_DOC <> '' Then
IfNull
(
( Select Sum(d2.PRICE)
From d_statistics_docs d2
Where d2.SD_ID >
( Select Max(SD_ID)
From d_statistics_docs d3
Where SD_DOC <> ''
And d3.SD_ID < d.SD_ID
)
And d2.SD_ID <= d.SD_ID
)
, d.PRICE
)
Else d.PRICE
End TotPrev
From d_statistics_docs d
给出给定示例的所需输出向我们展示所需输出。我添加了所需输出