복붙노트

[SQL] 어떻게 MySQL은 날짜의 평균을 만들 수 있습니까?

SQL

어떻게 MySQL은 날짜의 평균을 만들 수 있습니까?

어떻게 MySQL은 날짜의 평균은 할 수 있습니까? 나는 시간 값, 시간 및 분에 더 관심이 있어요.

테이블이 경우 :

| date_one   | datetime |
| date_two   | datetime |

쿼리를 같이 수행 :

 SELECT AVG(date_one-date_two) FROM some_table WHERE some-restriction-applies;

평균 (DATE1 - DATE2)은 작동하지만 나는 그것이 반환되는 데이터 단서가 없다.

해결법

  1. ==============================

    1.이 비트 hackish 보이지만 날짜 ~ 1970 년과 2030 beteen (32 비트 아치)에 대한 작동합니다. 당신은 본질적으로 정수로 날짜 값을 변환을 평균 및 날짜 시간 값을 평균 다시 변환된다.

    이 비트 hackish 보이지만 날짜 ~ 1970 년과 2030 beteen (32 비트 아치)에 대한 작동합니다. 당신은 본질적으로 정수로 날짜 값을 변환을 평균 및 날짜 시간 값을 평균 다시 변환된다.

    SELECT
        from_unixtime(
            avg(
                unix_timestamp(date_one)-unix_timestamp(date_two)
            )
        )
    FROM
        some_table
    WHERE
        some-restriction-applies
    

    거기 밖으로 더 나은 솔루션은 가능성이 있지만,이 핀치에 의해 당신을 얻을 것이다.

  2. ==============================

    2.

    select avg(datediff(date1,date2))
    select avg(timediff(datetime,datetime))
    
  3. ==============================

    3.

    SELECT date_one + (date_two - date_one) / 2 AS average_date
    FROM thetable
    WHERE whatever
    

    당신은 날짜 합계 수는 없지만, 당신이 그들을 빼고 당신이 절반와 첫 데이트에 다시 추가 할 수있는 시간 간격을 얻을 수 있습니다.

  4. ==============================

    4.

    SELECT TIMESTAMPADD(MINUTE, TIMESTAMPDIFF(MINUTE, '2011-02-12 10:00:00', '2011-02-12 12:00:00')/2, '2011-02-12 10:00:00')
    

    결과는 '2011-02-12 11시 0분 0초'

  5. ==============================

    5.생각은하고 설정 한 시간에 다시 그 분을 추가하는 것이 평균, 설정된 시간에서 분에 DATEDIFF을 할 수 outloud ...

    생각은하고 설정 한 시간에 다시 그 분을 추가하는 것이 평균, 설정된 시간에서 분에 DATEDIFF을 할 수 outloud ...

  6. ==============================

    6.

    CREATE TABLE `some_table`
    (
      `some_table_key` INT(11) NOT NULL AUTO_INCREMENT,
      `group_name` VARCHAR(128) NOT NULL,
      `start` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
      `finish` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY  (`some_table_key`)
    );
    
    SELECT
        group_name,
        COUNT(*) AS entries,
        SEC_TO_TIME( AVG( TIME_TO_SEC( TIMEDIFF(finish, start) ) ) ) AS average_time
    FROM some_table
    GROUP BY
        some_table.group_name
    ;
    

    나중에 당신을 위해 올바른 그룹을 선택합니다 등 가입 및 가정 MySQL과 쿼리를 확장 할 경우, 당신은 항상 그룹 기능을 사용하면 원하는 그룹, 당신은 그룹 기능 성가신 놨에서 끝낼 수 지정해야합니다.

  7. ==============================

    7.AVG는 행 수에 의해 분할 테이블의 모든 행의 합계를 의미 그룹화 기능이다. 각 행에 대해 개별적으로보고 된 두 개의 서로 다른 컬럼의 평균을 원하는 것처럼하지만 소리. 이 경우, 당신은 스스로를 계산한다 : (날짜 1 + DATE2) / 2. (MySQL은 몇 가지 여분의 구문이 제대로 그 열을 추가 할 수 있습니다.)

    AVG는 행 수에 의해 분할 테이블의 모든 행의 합계를 의미 그룹화 기능이다. 각 행에 대해 개별적으로보고 된 두 개의 서로 다른 컬럼의 평균을 원하는 것처럼하지만 소리. 이 경우, 당신은 스스로를 계산한다 : (날짜 1 + DATE2) / 2. (MySQL은 몇 가지 여분의 구문이 제대로 그 열을 추가 할 수 있습니다.)

    당신이 작성한 코드는 당신에게 날짜 1과 날짜 2 사이의 테이블의 평균 경과 시간을 줄 것이다.

  8. from https://stackoverflow.com/questions/1021947/how-can-i-make-an-average-of-dates-in-mysql by cc-by-sa and MIT license