안녕하세요,, 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 인데 원하는시간대별로 데이터를 조회하는 방법 알려주시면 감사하겠습니다
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)) ;