Mysql 从不减少累积数字 创建表“测试”( `UniqueID`INT(11)非空自动增量, `日期`日期, `条目'VARCHAR(20), 主键(`UniqueID`) ); 在“测试”(日期,条目)值中插入 (‘2015-09-01’,‘text1’), (‘2015-09-01’,‘text1’), (‘2015-09-01’,‘text1’), (‘2015-09-02’,‘text2’), (‘2015-09-02’,‘text2’), (‘2015-09-02’,‘text2’), (‘2015-09-02’,‘text2’), (‘2015-09-03’,‘text3’), (‘2015-09-03’,‘text3’), (‘2015-09-03’,‘text3’), (‘2015-09-04’,‘text4’), (‘2015-09-04’,‘text4’), (‘2015-09-04’,‘text4’), (‘2015-09-04’,‘text4’), (‘2015-09-04’,‘text4’), ('2015-09-04','text4'); 设置@total:=0; 设置@prevCount:=0; 挑选 @总计:=如果(@prevCount
使用变量进行计算很棘手。使用Mysql 从不减少累积数字 创建表“测试”( `UniqueID`INT(11)非空自动增量, `日期`日期, `条目'VARCHAR(20), 主键(`UniqueID`) ); 在“测试”(日期,条目)值中插入 (‘2015-09-01’,‘text1’), (‘2015-09-01’,‘text1’), (‘2015-09-01’,‘text1’), (‘2015-09-02’,‘text2’), (‘2015-09-02’,‘text2’), (‘2015-09-02’,‘text2’), (‘2015-09-02’,‘text2’), (‘2015-09-03’,‘text3’), (‘2015-09-03’,‘text3’), (‘2015-09-03’,‘text3’), (‘2015-09-04’,‘text4’), (‘2015-09-04’,‘text4’), (‘2015-09-04’,‘text4’), (‘2015-09-04’,‘text4’), (‘2015-09-04’,‘text4’), ('2015-09-04','text4'); 设置@total:=0; 设置@prevCount:=0; 挑选 @总计:=如果(@prevCount,mysql,Mysql,使用变量进行计算很棘手。使用分组依据,您需要使用子查询 你的逻辑对我来说不完全合理。我能想到的最合理的事情是累计最大值: CREATE TABLE `test` ( `UniqueID` INT(11) NOT NULL AUTO_INCREMENT, `Date` date, `Entry` VARCHAR(20), PRIMARY KEY (`UniqueID`) ); INSERT INTO `test` (Date,Entry) VALUES ('2015-09-01','text1
分组依据
,您需要使用子查询
你的逻辑对我来说不完全合理。我能想到的最合理的事情是累计最大值:
CREATE TABLE `test` (
`UniqueID` INT(11) NOT NULL AUTO_INCREMENT,
`Date` date,
`Entry` VARCHAR(20),
PRIMARY KEY (`UniqueID`)
);
INSERT INTO `test` (Date,Entry) VALUES
('2015-09-01','text1'),
('2015-09-01','text1'),
('2015-09-01','text1'),
('2015-09-02','text2'),
('2015-09-02','text2'),
('2015-09-02','text2'),
('2015-09-02','text2'),
('2015-09-03','text3'),
('2015-09-03','text3'),
('2015-09-03','text3'),
('2015-09-04','text4'),
('2015-09-04','text4'),
('2015-09-04','text4'),
('2015-09-04','text4'),
('2015-09-04','text4'),
('2015-09-04','text4');
SET @total:= 0;
SET @prevCount:= 0;
SELECT
@total:= IF (@prevCount <= COUNT(Entry),@total + (COUNT(Entry) - @prevCount),@total) AS total,
@prevCount := COUNT(Entry) AS dayTotal,
`Entry`,
`Date`
FROM test
GROUP BY `Date`
ORDER BY `Date` ASC
| total | dayTotal | Entry | Date |
|-------|----------|-------|-----------------------------|
| 3 | 3 | text1 | September, 01 2015 00:00:00 |
| 4 | 4 | text2 | September, 02 2015 00:00:00 |
| 3 | 3 | text3 | September, 03 2015 00:00:00 |
| 6 | 6 | text4 | September, 04 2015 00:00:00 |
注意:我删除了
条目
,因为它不在分组中
您不能只进行自连接来获取计数,而不是使用用户变量吗?问题是我的完整表将有数百万行,所以理想情况下我不希望太多。通过记录的顺序计数将需要通过这些数百万行双重地。根据:"对于其他语句,例如SELECT,您可能会得到预期的结果,但这并不能保证。在下面的语句中,您可能认为MySQL将首先计算@a,然后再进行赋值:SELECT@a,@a:=@a+1,…;
但是,涉及用户变量的表达式的计算顺序是未定义的指定您希望代码实际执行的操作。不清楚您试图执行的操作。例如,您在子选择中有条目
,但在分组中没有
。我现在更新了我的问题以显示预期结果。遗憾的是,最大值不正确,因为它在最后一天应该增加3。
SELECT @max := if(@max > dayTotal, @max, dayTotal)
FROM (SELECT `Date`, COUNT(*) as dayTotal
FROM test
GROUP BY `Date`
) t CROSS JOIN
(SELECT @max := 0) params
ORDER BY `Date` ASC;