sql - 从 MIN 日期获取 MAX 日期时间值
问题描述
我的表有零件号、零件序列号、零件测试号、零件测试结果和零件测试日期。关键是零件号、零件序列号、零件测试号和零件测试日期。同一序列号和测试号在同一天的不同日期和不同时间测试的零件。我想看看它被测试的第一天和那天的最后结果。我想创建一个视图。可以有不同的零件号,每个零件号可以有不同的序列号。每个零件编号与不同的测试编号相关联
以下是特定部件号、序列号、测试的结果
零件号 序列号 TEST # DATE 测试值 555-99 abcd123 10 11/30/18 2:02 0 555-99 abcd123 10 11/30/18 2:22 13714.66797 555-99 abcd123 10 11/30/18 2:23 2 555-99 abcd123 10 11/30/18 9:22 5 555-99 abcd123 10 11/30/18 10:22 14809.70703 555-99 abcd123 10 19 年 1 月 9 日 6:13 14574.62891 555-99 abcd123 10 19 年 1 月 9 日 6:14 14084.62891 555-99 abcd123 10 1/9/19 14:53 14119.66797 555-99 abcd123 10 19 年 1 月 9 日 14:54 13874.72656 555-99 abcd123 10 19 年 1 月 9 日 14:53 14844.74609 555-99 abcd123 10 1/11/19 7:19 15404.76563 555-99 abcd123 10 19 年 1 月 15 日 17:47 14179.76563 555-99 abcd123 10 1/17/19 0:17 14214.64844 555-99 abcd123 10 1/17/19 0:17 14216.64944
输出应该是
555-99 abcd123 10 11/30/18 9:22 5
我想创建一个视图,其中包含每个序列号的所有零件号及其最后一次测试时的测试号。
任何帮助是极大的赞赏。
如果我通过序列号,这将给出所需的结果:
DECLARE @DATE DATETIME2(7);
DECLARE @TOPDATE DATETIME2(7);
DECLARE @MAXDATE DATETIME2(7);
SELECT @Date = MIN(DATA_Date_Time) FROM DATA_Fields WHERE DATA_Serial =
'UNLDR598' ;
SELECT @TOPDATE = dateadd(hh, 23, @DATE)
select @MAXDATE =max(DATA_Date_Time )from DATA_Fields where
DATA_Date_Time > @DATE AND DATA_Date_Time < @TOPDATE AND
DATA_Serial = 'UNLDR598'
SELECT DATA_PART,DATA_SERIAL, DATA_TEST, data_value ,DATA_Date_Time
FROM DATA_Fields
where DATA_Serial = 'UNLDR598'
AND DATA_Date_Time = @MAXDATE
<br>
解决方案
您可以使用两个窗口函数来实现这一点。
declare @table table ([part number] varchar(6), [serial number] varchar(16), [TEST #] int, [DATE] datetime, [test-value] decimal(10,5))
insert into @table
values
('555-99','abcd123',10,'11/30/18 2:02',0),
('555-99','abcd123',10,'11/30/18 2:22',13714.66797),
('555-99','abcd123',10,'11/30/18 2:23',2),
('555-99','abcd123',10,'11/30/18 9:22',5),
('555-99','abcd123',10,'11/30/18 10:22',14809.70703),
('555-99','abcd123',10,'1/9/19 6:13',14574.62891),
('555-99','abcd123',10,'1/9/19 6:14',14084.62891),
('555-99','abcd123',10,'1/9/19 14:53',14119.66797),
('555-99','abcd123',10,'1/9/19 14:54',13874.72656),
('555-99','abcd123',10,'1/9/19 14:53',14844.74609),
('555-99','abcd123',10,'1/11/19 7:19',15404.76563),
('555-99','abcd123',10,'1/15/19 17:47',14179.76563),
('555-99','abcd123',10,'1/17/19 0:17',14214.64844),
('555-99','abcd123',10,'1/17/19 0:17',14216.64944)
select top 1 with ties *
from
(
select
*
,FirstDay = dense_rank() over (partition by [part number], [serial number], [TEST #] order by cast([DATE] as date))
from @table
) x
where FirstDay = 1
order by row_number() over (partition by [part number], [serial number], [TEST #] order by [DATE] desc)
Thais 回答了我想在第一天看到它被测试的请求以及那天的最后一个结果,这与您的示例输出不匹配。
要获得预期输出的倒数第二个,请使用以下内容:
select *
from(
select
*
,RN = row_number() over (partition by [part number], [serial number], [TEST #] order by [DATE] desc)
from
(
select
*
,FirstDay = dense_rank() over (partition by [part number], [serial number], [TEST #] order by cast([DATE] as date))
from @table
) x
where FirstDay = 1
) y
where RN = 2
推荐阅读
- automation - 使用 RDP 进行社区版执行的 Uipath 自动化
- angular - Angular Material Elevate 不在 2 个组件之间显示
- jquery - Jquery Datatable根据值更改行颜色
- airflow - 有没有办法将失败的 Airflow 任务的错误文本传递给另一个任务?
- java - 詹金斯设置问题
- excel - Getting AdvancedFilter method of range class failed error while coping unique data from one excel to another
- ios - Swift 4.2 Decoding Object Unknown Keys
- node.js - heroku 主机与 eris
- python - Upsample seasonal data to daily data over 10 years in Python xarray
- bash - 如何参考另一列中的匹配值添加来自两个不同文件的两列?