2017-01-24 103 views
-3

我拿到了列表[TagTime],[TagValue],[id]。此表中的值每15分钟一次,所以具有相同ID的多个值。SQL MIN DATE> = 2017-01

我想select(tagtime,tagvalue,id),它将只在2017年1月为所有id返回第一个值。

我试着选择top 1,然后用group by,distinct ...但它不起作用。你有一些建议吗?

+1

添加样本数据与预期的o/p –

+2

分享我们您没有成功的书面代码,也标记您正在使用的dbms –

+2

分享一些书面代码,da列的类型。 – Hexxed

回答

0

试试这个(我假设你使用的是MSSQL)

SELECT TOP 1 * 
FROM [tbl1] 
WHERE DATEPART(MONTH,TagTime) = '01' AND DATEPART(YEAR,TagTime) = '2017' 
ORDER BY TagTime DESC 
+0

这将只返回1行,而不是1行,因为OP期望 – PawelCz

0

你可以走这条路

select id, tagvalue, tagtime 
from 
    (select id, tagvalue, tagtime, 
      row_number() over (partition by id order by tagtime) [RowNum] 
     from YourTable 
     where DATEPART(year, tagtime) = 2017) src 
where src.[RowNum] = 1 

所以,您不必为每个ID行号,由tagtime排序,然后选择只是第一个ID

+0

但是2017年1月在哪里? – bobialen

+0

我编辑2017年,您的订单将排序月 – Veljko89

+0

它工作得很好。如果我想要这个视图不是恰好在2017年1月,而是在当前的月份? – bobialen