2016-02-01 2 views
0

Я пытаюсь получить среднее количество дней из списка дат с помощью php, но я ничего не могу найти в сети, поэтому я решил попробовать здесь. Вот что мой msyql выводит до сих пор для меня.PHP Средний день между списком дат

2016-01-28 
2016-01-27 
2016-01-20 
2015-12-28 
2015-12-12 
2015-12-05 
2015-12-01 
2015-11-27 
2015-11-21 
2015-11-11 
2015-11-03 
2015-10-31 
2015-10-27 
2015-10-17 
2015-10-05 
2015-09-20 
2015-09-14 
2015-09-02 
2015-08-26 
2015-08-18 
2015-08-14 
2015-08-08 
2015-07-29 
2015-07-18 
2015-07-08 
2015-06-22 
2015-06-18 
2015-06-07 
2015-05-15 
2015-05-13 
2015-05-12 
2015-05-02 

мой код, чтобы получить даты:

$result = mysql_query($query,$db) or die(mysql_error()); 
    while($row = mysql_fetch_array($result)) { 

     echo $row['date']."<br>"; 

    } 

Я пытаюсь получить среднее количество дней между каждым выходом .... какой-либо вид помощи я могу получить на это значительно оценили!

+1

Может у добавить код PHP? – rdn87

+0

Между каждой датой и любой другой датой? Или каждую дату и следующую дату, или что? – Will

+1

Не используйте устаревший mysql_ API PHP – Strawberry

ответ

0
DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(dt DATE NOT NULL PRIMARY KEY); 

INSERT INTO my_table VALUES 
('2016-01-28'), 
('2016-01-27'), 
('2016-01-20'), 
('2015-12-28'), 
('2015-12-12'), 
('2015-12-05'), 
('2015-12-01'), 
('2015-11-27'), 
('2015-11-21'), 
('2015-11-11'), 
('2015-11-03'), 
('2015-10-31'), 
('2015-10-27'), 
('2015-10-17'), 
('2015-10-05'), 
('2015-09-20'), 
('2015-09-14'), 
('2015-09-02'), 
('2015-08-26'), 
('2015-08-18'), 
('2015-08-14'), 
('2015-08-08'), 
('2015-07-29'), 
('2015-07-18'), 
('2015-07-08'), 
('2015-06-22'), 
('2015-06-18'), 
('2015-06-07'), 
('2015-05-15'), 
('2015-05-13'), 
('2015-05-12'), 
('2015-05-02'); 

SELECT x.* 
    , DATEDIFF(MIN(y.dt),x.dt) diff 
    FROM my_table x 
    JOIN my_table y 
    ON y.dt > x.dt 
GROUP 
    BY x.dt; 
+------------+------+ 
| dt   | diff | 
+------------+------+ 
| 2015-05-02 | 10 | 
| 2015-05-12 | 1 | 
| 2015-05-13 | 2 | 
| 2015-05-15 | 23 | 
| 2015-06-07 | 11 | 
| 2015-06-18 | 4 | 
| 2015-06-22 | 16 | 
| 2015-07-08 | 10 | 
| 2015-07-18 | 11 | 
| 2015-07-29 | 10 | 
| 2015-08-08 | 6 | 
| 2015-08-14 | 4 | 
| 2015-08-18 | 8 | 
| 2015-08-26 | 7 | 
| 2015-09-02 | 12 | 
| 2015-09-14 | 6 | 
| 2015-09-20 | 15 | 
| 2015-10-05 | 12 | 
| 2015-10-17 | 10 | 
| 2015-10-27 | 4 | 
| 2015-10-31 | 3 | 
| 2015-11-03 | 8 | 
| 2015-11-11 | 10 | 
| 2015-11-21 | 6 | 
| 2015-11-27 | 4 | 
| 2015-12-01 | 4 | 
| 2015-12-05 | 7 | 
| 2015-12-12 | 16 | 
| 2015-12-28 | 23 | 
| 2016-01-20 | 7 | 
| 2016-01-27 | 1 | 
+------------+------+ 

В среднем, то это просто среднее значение различий, так:

SELECT AVG(diff) 
    FROM 
    (SELECT x.* 
      , DATEDIFF(MIN(y.dt),x.dt) diff 
     FROM my_table x 
     JOIN my_table y 
      ON y.dt > x.dt 
     GROUP 
      BY x.dt 
    ) a; 

+-----------+ 
| AVG(diff) | 
+-----------+ 
| 8.7419 | 
+-----------+ 
+0

Спасибо за это, пытаясь добавить в ИНЕКЕ, но это бросает ошибку: 'ВЫБРАТЬ AVG (дифф) FROM (SELECT х * , DATEDIFF (MIN (y.dt), x.dt) дифф ОТ my_table. х РЕГИСТРИРУЙТЕСЬ my_table у пО y.dt> x.dt ГДЕ x.name LIKE '%% Andy' ГРУППА пО x.dt ) а; ' – thevoipman

+0

имя не является столбец в my_table – Strawberry

+0

он находится в шахте , я добавил – thevoipman

Смежные вопросы