iT邦幫忙

0

MS SQL 只撈取最新日期的資料

  • 分享至 

  • xImage

各位大大好 想請問MS SQL資料庫要怎麼只撈取最新日期的資料呢???
https://ithelp.ithome.com.tw/upload/images/20180515/20107444vm9cx3ibaI.jpg

  SELECT  
       [pat_no]
      ,[item_code]
      ,[value]
      ,[rpt_time]
  FROM [Tmhtc_PHR].[dbo].[lab_item]  
  WHERE [pat_no] = '33561' AND ([item_code] = '09015' OR [item_code] = '09002' OR [item_code] = '09025' OR [item_code] = '09026') 
  ORDER BY [rpt_time] DESC
你的問題是4筆資料都相同時間吧,那就用建檔順序去抓吧~你應該有建檔流水號吧?
若都沒有的話@@~
4筆都帶出來是正常的...
除非你要加上 top 1 的SQL指令~
小魚 iT邦大師 1 級 ‧ 2018-05-15 20:02:12 檢舉
看起來好像沒有主鍵...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
KUI
iT邦新手 4 級 ‧ 2018-05-16 10:37:21
最佳解答

還是有點不懂......
1.你是只要(09002, 09015, 09025, 09026)這四個中,各自日期最新的資料?
2.還是日期最新的資料?
3.還是不管是誰,他們各自最新的資料?

//第一個
SELECT  
      [pat_no],
      [item_code],
      [value],
      max([rpt_time])
  FROM [Tmhtc_PHR].[dbo].[lab_item]  
  WHERE [pat_no] = '33561' 
  AND [item_code] in ('09015','09002','09025','09026') 
  GROUP BY [item_code] 
//第二個
SELECT  
      *
  FROM [Tmhtc_PHR].[dbo].[lab_item]  
  WHERE [pat_no] = '33561' AND [rpt_time] = (SELECT max([rpt_time]) FROM [Tmhtc_PHR].[dbo].[lab_item] )
  GROUP BY [item_code]
//第三個
SELECT  
      [pat_no],
      [item_code],
      [value],
      max([rpt_time])
  FROM [Tmhtc_PHR].[dbo].[lab_item]  
  WHERE [pat_no] = '33561'
  GROUP BY [item_code] 
看更多先前的回應...收起先前的回應...
小火車 iT邦新手 4 級 ‧ 2018-05-16 14:10:09 檢舉

謝謝大大的詳細回復 我要的是第一項
只要(09002, 09015, 09025, 09026)這四個中,各自日期最新的資料
很抱歉我表達的不清楚 @@

KUI iT邦新手 4 級 ‧ 2018-05-16 14:17:42 檢舉

哇!第一個最佳解答www/images/emoticon/emoticon37.gif
沒關係,就溝通呀
能解答到您,真是太好了

小火車 iT邦新手 4 級 ‧ 2018-05-16 17:58:02 檢舉

但是大大,實際RUN會有錯誤
我把語法改成 變成全部資料都撈出來 @@

SELECT  
      [pat_no],
      [item_code],
      [value],
      max([rpt_time])
  FROM [Tmhtc_PHR].[dbo].[lab_item]  
  WHERE [pat_no] = '33561' 
  AND [item_code] in ('09015','09002','09025','09026') 
  GROUP BY [item_code], [pat_no], [value]
KUI iT邦新手 4 級 ‧ 2018-05-18 09:45:23 檢舉

GROUP BY 用錯了喔
你應該是想用ORDER BY 吧??
你GROUP BY value 你只要全部的值都不一樣,他就幫你分類喔

0

這樣…

SELECT *
FROM table
WHERE rpt_time=(
SELECT MAX(rpt_time) FROM table);
看更多先前的回應...收起先前的回應...

這樣只會出現最後日期時間的資料,並不是最新日期的資料?
如果是日期應該用 MAX(convert(varchar, rpt_time, 112))

最後日期時間 不等於 最新日期?

小魚 iT邦大師 1 級 ‧ 2018-05-15 20:01:38 檢舉

是 最新日期 的那一筆資料...不是只有日期...

是啊,所以應該是
SELECT *
FROM table
WHERE convert(varchar, rpt_time, 112)=(SELECT MAX(convert(varchar, rpt_time, 112)) FROM table);
這個資料比較像溫濕度及壓力的data。

可惜他的rpt_time欄位
4筆都是2018-05-01 09:51:00
不知道那筆是最新的~

@純真的人
item_code 是不一樣的,應該是抓同一天的不同地方的溫度、濕度與壓力資料。

嗯~那要看他到底是怎麼說了@@..

小火車 iT邦新手 4 級 ‧ 2018-05-16 10:03:06 檢舉

感謝大大們的回覆 不好意思小弟表達的不清楚
我主要是要撈[item_code] 09002, 09015, 09025, 09026
這四筆[rpt_time]最新[value]欄位內的植

ninja iT邦研究生 2 級 ‧ 2021-11-30 17:31:41 檢舉

單純用日期來分的話,這個好用

0
jumpbow
iT邦新手 4 級 ‧ 2018-05-16 12:06:54

試試以下SQL
select * FROM [Tmhtc_PHR].[dbo].[lab_item]
where CONVERT(varchar(12) , rpt_time, 111 )=( select top 1 CONVERT(varchar(12) , rpt_time, 111 ) from [Tmhtc_PHR].[dbo].[lab_item]
order by rpt_time desc )

小火車 iT邦新手 4 級 ‧ 2018-05-16 14:10:32 檢舉

感謝大大用心地回復 謝謝

我要發表回答

立即登入回答