SELECT
TOP 1 *
FROM ( SELECT ROW_NUMBER() OVER (ORDER BY measurement_date DESC,SUBSTRING(measurement_time,4,3) DESC ) AS rownum
, CASE device_plot
WHEN '11' THEN 'Plot1'
WHEN '22' THEN 'Plot2'
WHEN '33' THEN 'Plot3'
WHEN '44' THEN 'Plot4'
WHEN '55' THEN 'Plot5'
WHEN '66' THEN 'Plot6'
ELSE '' END AS deviceplot
, CONVERT(CHAR(10), CONVERT(DATETIME, measurement_date), 111) measurementdate
, STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 0, ':') measurementtime
, ISNULL(CAST(MAX(CASE device_plot_tmb WHEN '1' THEN temperature_value END) AS VARCHAR), '-') temperaturevalueT
, ISNULL(CAST(MAX(CASE device_plot_tmb WHEN '2' THEN temperature_value END) AS VARCHAR), '-') temperaturevalueM
, ISNULL(CAST(MAX(CASE device_plot_tmb WHEN '3' THEN temperature_value END) AS VARCHAR), '-') temperaturevalueB
, ISNULL(CAST(MAX(CASE device_plot_tmb WHEN '1' THEN humidity_value END) AS VARCHAR), '-') humidityvalueT
, ISNULL(CAST(MAX(CASE device_plot_tmb WHEN '2' THEN humidity_value END) AS VARCHAR), '-') humidityvalueM
FROM smarcle_data_log
WHERE 1=1
AND device_plot = '11'
AND (SUBSTRING(measurement_time,3,2) % 10)=0
GROUP BY device_plot, measurement_date, measurement_time)a
ORDER BY measurementdate desc, measurementtime desc
쿼리문 입니다!
사진 보시면 아래 표출되는 measurementtime에 10시 50분 09초로 찍혀 있습니다 (10:50:09)
이것을 서브스트링으로 잘라서 10시 50분 (10:50:09)--->(10:50) 이렇게 표출을 하고싶은데 서브스트링을 써도 안되네요 쿼리문에 문제가 있나요? 도와주시면 감사하겠습니다!
, STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 0,'') measurementtime 이 부분을 left로 자르게 되면 오류가 납니다...
, STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 0,'') LEFT(measurementtime,4)
1. 왜 알리아스에다가 LEFT 를 붙이나요?
- ":" 까지 감안하면 숫자도 4가 아닌 5가 되어야 하구요.
- STUFF(6,0) 이 아닌 STUFF(6,2) 를 했다면? LEFT 도 필요 없죠.
- 아니면 두번째 STUFF 쓰지 말고 그냥 LEFT 해도 되구요.
- 변경전 : , STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 0, '') LEFT(measurementtime, 4)
- 변경후 : , LEFT(STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 0, ''), 5) measurementtime
- 개선1 : , STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 2, '') measurementtime
- 개선2 : , LEFT(STUFF(measurement_time, 3, 0, ':'), 5) measurementtime