从数据库中选择几个时段的平均值

时间:2016-02-13 04:15:44

标签: sql database oracle statistics

我需要在几个时间间隔内得到同期的平均数 所以现在我的查询看起来很难看,是否有可能让它变得更好?例如,如果我想获得7周的数据,我需要复制/粘贴相同的7行,argh!
另外,我有一个关于如何丢弃极值的问题(0,10,15,11 - 从样本中删除0)。

import urllib2
response = urllib2.urlopen("http://'user1':'password'@server_name/file")

如果它很重要,我使用的是Oracle DB。

3 个答案:

答案 0 :(得分:1)

也许尝试使用GROUP BY。

SELECT AVG(C) FROM (
SELECT SUM(1) AS C
,to_number(to_char(date,'WW')) as DT FROM a.b
GROUP BY to_number(to_char(date,'WW')))

答案 1 :(得分:0)

SELECT count(*) / 4
FROM a.b
WHERE id = 1
AND (DATE BETWEEN sysdate - 7 - (1 / 24 / 4) AND sysdate - 7
 OR DATE BETWEEN sysdate - 14 - (1 / 24 / 4) AND sysdate - 14
 OR DATE BETWEEN sysdate - 21 - (1 / 24 / 4) AND sysdate - 21
 OR DATE BETWEEN sysdate - 28 - (1 / 24 / 4) AND sysdate - 28)

这是有效的,因为无论如何你总结了四个计数。

我担心我不理解你关于抛弃极端价值观的第二个问题。

答案 2 :(得分:0)

  

设置测试数据:

<?php 

            $conn=@mysqli_connect($_SESSION['servername'],$_SESSION['username'],
                $_SESSION['password'], $_SESSION['database']) or die(mysql_error());
                $verifExistence1 = "SELECT * FROM `annonces`;";
                $result = mysqli_query($conn, $verifExistence1);

                echo "<table border = 2>";
                echo "<table  align='center'>   <thead>
                                <tr>
                                    <th>Titre</th>
                                    <th>Description</th>
                                    <th>Image</th>
                                </tr>
                            </thead>
                            <tbody>";
                while($row =  @mysqli_fetch_assoc($result)){
                $idbis=$row['id'];
                $titrebis=$row['titre'];
                echo "<tr>
                <td>" . $row['titre'] . "</td><td>" . $row['description'] . "</td>
                <td> <a   href=\"DetailsAnnonces.php?id=$idbis\">$titrebis</a>
                </tr>";

                }
                echo "</table>";
                //echo $html_table;
                ?>
  

示例查询:

drop table b;
create table b(event_id number, event_date date);

begin
for i in 1 .. 100000
loop
insert into b values(floor(dbms_random.value(1,5)),sysdate - abs(dbms_random.normal)*20);
end loop;
commit;
end;
/