【发布时间】:2011-01-21 15:23:43
【问题描述】:
我有一个带有 ID、value1、value2、value3 和 tstamp(TIMESTAMP 格式)的表,我试图按每天分组并找到每天的总数,但是所有值都是累积的,这会造成问题,因为 sum(value1) 没有给出正确的输出,这是我的代码:
$sql = "select date(tstamp), sum(".$column.") from mash group by date(tstamp) order by tstamp asc limit 10";
$result = mysql_query($sql);
$previous = 0;
$firstRun = true;
while($row = mysql_fetch_array($result))
{
$difference = $row[1] - $previous;
if (!$firstRun)
{
$strXML .= "<set name='".$row[0]."' value='".$difference."' color='AFD8F8' />";
}
$previous = $row[1];
$firstRun = false;
}
任何人都可以在这段代码中发现问题,它没有出错,只是给出了错误的答案。
编辑:
为了消除任何混淆,这是 SQL:
--------------------------------------------------------
--
-- Table structure for table `mash`
--
CREATE TABLE IF NOT EXISTS `mash` (
`id` int(25) NOT NULL AUTO_INCREMENT,
`steam` int(25) NOT NULL,
`bore_water` int(25) NOT NULL,
`boiler1oil` int(25) NOT NULL,
`boiler2oil` int(25) NOT NULL,
`tstamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5362 ;
--
-- Dumping data for table `mash`
--
INSERT INTO `mash` (`id`, `steam`, `bore_water`, `boiler1oil`, `boiler2oil`, `tstamp`) VALUES
(2, 436, 73, 15, 1, '2010-11-25 12:28:03'),
(3, 495, 74, 36, 1, '2010-11-25 12:38:04'),
(4, 553, 76, 58, 1, '2010-11-25 12:48:09'),
(5, 565, 77, 74, 1, '2010-11-25 12:58:05'),
(6, 584, 79, 78, 1, '2010-11-25 13:08:05'),
(7, 630, 82, 100, 1, '2010-11-25 13:18:11'),
(8, 686, 86, 130, 1, '2010-11-25 13:28:07'),
(9, 740, 89, 151, 1, '2010-11-25 13:38:07'),
(10, 780, 93, 173, 1, '2010-11-25 13:48:13'),
(11, 883, 100, 218, 1, '2010-11-25 14:08:10');
【问题讨论】:
-
您不能按
DATE(tstamp)分组,然后按最后一个具有您要查找的值的条目排序吗? -
我不知道为什么它不起作用布拉德,但在某些方面它给出了负结果,这绝对是不正确的。我试过 desc 和 asc 都不管用
-
@benhowdle89:我现在正在填充一个演示数据库,所以我有一些东西要测试。假设您希望每天从最新(最后插入的)条目中获得“value1”、“value2”等(因为最后一个始终是前一个值加上新值?)
-
嗨布拉德,感谢您抽出宝贵时间回答这个问题,请参阅我编辑的答案:)
-
@benhowdle 现在看过了,我相信您正在寻找每列的 MAX(),按 DATE(tstamp) 分组。例如
SELECT DATE(tstamp), MAX(Steam) As Max_Steam FROM mash GROUP BY DATE(tstamp);