我有各种时间记录,几乎都略有不同(几秒钟)。对我来说,那些非常小的差异意义不大,所以我想将一列中最多相差 1% 的值组合在一起。
有谁知道这是否可能?
例子:
假设我们有这张表:
<style type="text/css">
table.tableizer-table {
font-size: 12px;
border: 1px solid #CCC;
font-family: Arial, Helvetica, sans-serif;
}
.tableizer-table td {
padding: 4px;
margin: 3px;
border: 1px solid #CCC;
}
.tableizer-table th {
background-color: #104E8B;
color: #FFF;
font-weight: bold;
}
</style>
<table class="tableizer-table">
<thead><tr class="tableizer-firstrow"><th>ID</th><th>Time_Sec</th></tr></thead><tbody>
<tr><td>1</td><td>3000</td></tr>
<tr><td>1</td><td>3002</td></tr>
<tr><td>1</td><td>3003</td></tr>
<tr><td>1</td><td>4455</td></tr>
<tr><td>1</td><td>4455</td></tr>
<tr><td>1</td><td>4456</td></tr>
<tr><td>2</td><td>1000</td></tr>
<tr><td>2</td><td>1001</td></tr>
<tr><td>2</td><td>1001</td></tr>
</tbody></table>
我想以此结束:
<style type="text/css">
table.tableizer-table {
font-size: 12px;
border: 1px solid #CCC;
font-family: Arial, Helvetica, sans-serif;
}
.tableizer-table td {
padding: 4px;
margin: 3px;
border: 1px solid #CCC;
}
.tableizer-table th {
background-color: #104E8B;
color: #FFF;
font-weight: bold;
}
</style>
<table class="tableizer-table">
<thead><tr class="tableizer-firstrow"><th>ID</th><th>Group_AVG_Time_Sec</th></tr></thead><tbody>
<tr><td>1</td><td>3002</td></tr>
<tr><td>1</td><td>4455</td></tr>
<tr><td>2</td><td>1001</td></tr>
</tbody></table>
这样的事情应该适合你:
SELECT
ID,
TRUNC(AVG(time_sec)) as time_sec
FROM
data
GROUP BY
ID,
TRUNC(time_sec/20)
对于在百分比上更有效的东西(并注意这不会输出您的预期结果,但可能会产生)您可以考虑做这样的事情:
SELECT
id,
time_sec
FROM
(
SELECT
id,
COALESCE(LAG(id) OVER(order by id), 0) as prev_id,
time_sec,
COALESCE(LAG(time_sec) OVER(order by id, time_sec), 0) as prev_time_sec
FROM
(
SELECT
ID,
TIME_SEC
FROM
data
)
)
WHERE
id != prev_id OR
((time_sec - prev_time_sec) / time_sec) * 100 > 1
ORDER BY
ID,
time_sec
这会按 ID 和时间对行进行排序,并且仅显示与上面的行相比 ID 已更改或时间(对于该 ID)与前一时间相差超过 1% 的那些行。然而,并不是“一个组内的所有时间都在每个结束的 1% 之内”,因为这又回到了你如何定义组。本质上,此 SQL 将时间相距 0.9% 的 20 行系列折叠为一行。如果你想要更多的 10 行,其中有 X 行,然后是每 N 行,如果它的时间在第一行的 1% 以内,它被抑制;这更像是一个排名练习,但实施起来可能更简单,即除以某个数字并截断以降低所有时间的精度,如第一个示例所示
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句