我有一个超过300,000行的表格,我想在图表上呈现这些数据,但是300,000行并不是一次真正必要的。例如,即使某一天可能有100行数据,如果我显示一整年的数据,我也不需要显示所有数据。所以我想" granularize"数据。
我正在考虑获取所有内容,然后使用脚本删除我不需要的内容,但这似乎对数据库来说会更慢更难。
所以这就是我到目前为止所拥有的。
var SubFormStuff = {
init: function()
this.applySubConditionalRequired();
this.bindUISubActions();
},
bindUISubActions: function() {
// when a radio or checkbox changes value, click or otherwise
$("input[type='radio'].stepThreeDiag").change(function() {
if($(this).attr("id") == "maybe_evtDiag") {
$(this).prop('checked', false);
}else{
//this is not working //
applySubConditionalRequired(this);
displaySubFormRequired(this);
}
});
},
applySubConditionalRequired: function() {
$(".require-if-subevent-active").each(function() {
var el = $(this);
// does something
});
},
displaySubFormRequired: function() {
$(".div-subevent-class").each(function() {
var el = $(this);
// does something else
});
}
};
SubFormStuff.init();
这给了我所有行和数字。我计划添加一个where子句来获取每1000行(即每第n行),就像这样
SET @row_number := 0;
SELECT @row_number := @row_number + 1 as row_number,
price, region, timestamp as row_number FROM pricehistory;
但是由于某种原因,MYSQL没有将SET @row_number := 0;
SELECT @row_number := @row_number + 1 as row_number,
price, region, timestamp as row_number FROM pricehistory
WHERE row_number % 1000 = 0;
视为列。有任何想法吗?我已经在线查看了其他解决方案,但它们似乎并不适合MYSQL。
答案 0 :(得分:0)
正如Racil的评论建议的那样,如果你有一个自动递增的id字段,你可以去;但是您已经说过不同日期的数据量可能会有所不同,因此可能会产生非常扭曲的图表。如果您选择一年中的每1000条记录,并且一半的行是过去3个月("假日购物"对于商业示例),则一年的后半部分图形实际上将反映后一季度的年。为了获得更有用的结果,您可能会更喜欢这样的事情:
SELECT region, DATE(timestamp) AS theDate
, AVG(price), MIN(price), MAX(price)
FROM pricehistory
GROUP BY region, theDate
;
答案 1 :(得分:0)
看起来我不会得到另一个答案所以我会继续写下我想出的解决方案。
我的数据分布均匀,因为它定期抓住价格,因此没有理由担心这一点。
这是我的解决方案。
假设我有500,000行,我想显示这些行的子集,比如5000行。 500000/5000是100所以我拿100并在我的选择语句中使用它,如SELECT * FROM pricehistory where id % 100 = 0;
这是实际代码
public function getScaleFactor($startDate, $endDate) {
$numPricePoints = $this->getNumPricePointsBetweenDates($startDate, $endDate);
$scaleFactor = 1;
if ($numPricePoints > $this->desiredNumPricePoints) {
$scaleFactor = floor($numPricePoints / $this->desiredNumPricePoints);
}
return $scaleFactor;
}
然后我在SQL中使用$scaleFactor
,如SELECT * FROM pricehistory WHERE id % {$scaleFactor} = 0;
这不是一个完美的解决方案,因为你并不总是准确地得到5000行,但我并不需要5000行。我只是试图降低数据的分辨率,同时仍然得到一个看起来接近我使用所有500,000行的图表。