我试图一次从一张桌子上得到2行。上周的最小日期时间(今天-7)和最晚的日期(今天)的一个。 我的桌子:
|id |dataIn |dataOut|date |MachineId | -----+-------+-------+-----------------------+-------------------------------------+ |1 |5006 |58 |2011-10-25 09:03:17.000|7B788EE88E-6527-4CB4-AA4D-01B7F4048559 |2 |1200 |130 |2011-10-26 12:45:43.000|7B788EE88E-6527-4CB4-AA4D-01B7F4048559 ... |124 |1350 |480 |2011-10-29 13:29:04.000|7B788EE88E-6527-4CB4-AA4D-01B7F4048559 |125 |8005 |560 |2011-10-31 21:18:35.000|7B788EE88E-6527-4CB4-AA4D-01B7F4048559
我可以通过以下方式选择上周的数据:
SELECT dbo.myDatabase.Date AS [date], dbo.myDatabase.dataIn AS [in], dbo.myDatabase.dataOut AS [out] FROM dbo.myDatabase WHERE Date >=dateadd(day,datediff(day,0,GetDate())- 7,0) AND dbo.myDatabase.MachineId = '7B788EE88E-6527-4CB4-AA4D-01B7F4048559'
但我只想要第1行和第125行,因为这些是用于计算的行。所以我的问题是: 如何从上一个查询的结果中选择2行(带有MIN和MAX日期)?
您可以使用此:
select * from dbo.myDatabase where ([Date] = (select max([Date]) from /* your query */ ) or [Date] = (select min([Date]) from /* your query */ )) and MachineId = '7B788EE88E-6527-4CB4-AA4D-01B7F4048559' -- or any other id
编辑: 由于两台计算机完全有可能具有相同的date值,因此应更新查询MachineId以在where子句中也包含过滤器。我更新了查询以显示此内容。
date
MachineId
where