mysql 원하는 시간대 별 select 질문,, 0 4 817

by 치록 [MySQL] [2021.05.04 15:27:35]


안녕하세요,, mysql 왕초보 질문드립니다

우선 원하고자 하는것은 원하는 시간대(현재부터 1시간전, 00시부터 05시 이런식으로 정해진) 데이터를 뽑고싶습니다.

DB에 있는 시간데이터가 unixtime(1618898426 이런형식) 값입니다. 

 

DB에 있는 시간데이터가 unixtime 이라 from_unixtime을 써서 datetime으로 출력했습니다.

 

SELECT *, FROM_UNIXTIME(`clock`,'%Y%m%d %H%i%s') AS time1 FROM history_uint

 

이렇게 쿼리하면 time1 이라는 컬럼이 생겨서 datetime으로 변환된 값들이 조회가 되는데요

여기서 저 time1이라는 컬럼을 기준으로는 time1 >= DATE_ADD(NOW(), INTERVAL -1 HOUR) 로 조건을 걸면 time1이라는 컬럼이 없다고 확인됩니다.

 

오류 코드: 1054
Unknown column 'time1' in 'where clause'

 

시간값이 unixtime 인데 원하는시간대별로 데이터를 조회하는 방법 알려주시면 감사하겠습니다

by pajama [2021.05.04 17:07:41]

group by에서 시간 간격을 정하시면 될듯합니다~

select from_unixtime(dt,'%Y%m%d %H%i%s'), count(*)
from
(select unix_timestamp(adddate('2011-1-1', interval - (@num:=@num+1) hour)) dt
from 
    information_schema.COLUMNS,    
    (select @num:=-1) num
limit 
    1000
) as t 
group by dt div (60*60*5)

 


by 치록 [2021.05.11 13:44:28]

내용확인이 늦었습니다,,!

질문답변 정말 감사드립니다!


by 마농 [2021.05.04 17:48:17]

1. Select 절의 alias 를 where 절에서 바로 사용 불가
- inline view 를 이용하여 알리아스 조건 사용하는 방안
- 변환식 그대로를 조건절에서 사용하는 방안
2. 컬럼 변환하여 조건 주기는 비효율입니다.
- 컬럼을 그대로 둔 채 조건을 가공하여 비교하도록 개선이 필요합니다.
- 개선 전 : from_unixtime(clock) >= DATE_ADD(NOW(), INTERVAL -1 HOUR)
- 개선 후 : clock >= unix_timestamp(DATE_ADD(NOW(), INTERVAL -1 HOUR))

-- 현재부터 1시간전 --
SELECT *
     , FROM_UNIXTIME(`clock`,'%Y%m%d %H%i%s') AS time1
  FROM history_uint
 WHERE clock >= unix_timestamp(DATE_ADD(NOW(), INTERVAL -1 HOUR))
;

-- 오늘 00시 부터 05시 --
SELECT *
     , FROM_UNIXTIME(`clock`,'%Y%m%d %H%i%s') AS time1
  FROM history_uint
 WHERE clock >= unix_timestamp(DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-%d'), INTERVAL 0 HOUR))
   AND clock <  unix_timestamp(DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-%d'), INTERVAL 5 HOUR))
;


 


by 치록 [2021.05.11 13:45:55]

alias를 where절에서 바로 사용하는건 안되는거군요,,!

효율까지 따져주시며 쿼리를 짜주셔서 정말 감사드립니다!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입