pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

T-SQL 最大日期和最小日期值單行

T-SQL Max date and min date with value single row(T-SQL 最大日期和最小日期值單行)
本文介紹了T-SQL 最大日期和最小日期值單行的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

首先感謝幫助過這個復雜難查詢的朋友們.

First of all I would like to thank the friends who helped this complex and difficult query.

我有三張桌子

表一

 StaffId     FirstName       LastName   staffType
---------------------------------------
   1          Adam            Sorme      Student 
   2          Lara            Sandra     Teacher
   3          Jack            Jones      Student

表 2

 GateId   GateName  
 ---------------------------------------
   1        frontDoor
   2        superDoor

表 3

Id transitionDate     GateId  StaffId 
 ---------------------------------------
1  2018-01-1 08:00:00    1     1
2  2018-01-1 10:00:00    2     1
3  2018-01-1 20:00:00    2     1
4  2018-01-2 07:00:00    1     2
5  2018-01-2 10:00:00    1     3
6  2018-01-9 12:00:00    2     2

我想要學生每天的第一個和最后一個動作.如果在指定日期之間沒有可用的移動,則必須將值設置為 null

I want the first and last movements of students for each day. Value must be set to null if no movement is available between the specified dates

transitionDate> '2018-01-1 00:00:00 000' 
 and transitionDate< '2018-01-03 00:00:00 000'

輸出:

  Id     Date    MinTransitionDate    MaxTransitionDate    FirstGateName LastGateName    StaffId    StaffType
  1   2018-01-01  2018-01-1 08:00:00 2018-01-1 20:00:00    frontDoor      superDoor         1         Student
  2   2018-01-01  null                null                  null           null             3         student
  3   2018-01-02  null                null                  null           null             1         student
  4   2018-01-02  2018-01-2 10:00:00  null                 frontDoor       null             3         student

推薦答案

你可以試試像下面這樣的查詢

you can try a query like below

查看工作演示

create table staff(StaffId int,   FirstName  nvarchar(10),  LastName nvarchar(10),  staffType nvarchar(10))
insert into staff values
(1,'Adam','Sorme','Student') 
,(2,'Lara','Sandra','Teacher')
,(3,'Jack','Jones','Student')

go

create table gate(GateId int,  GateName  nvarchar(10))
insert into gate values
(1,'frontDoor')
,(2,'superDoor')

go
create table logs 
(Id int, transitionDate  datetime,   GateId  int, StaffId  int)
insert into logs values
(1,'2018-01-1 08:00:00',1,1)
,(2,'2018-01-1 10:00:00',2,1)
,(3,'2018-01-1 20:00:00',2,1)
,(4,'2018-01-2 07:00:00',1,2)
,(5,'2018-01-2 10:00:00',1,3)
,(6,'2018-01-9 12:00:00',2,2)
go
declare @startdate datetime, @enddate datetime
select @startdate='2018-01-1 00:00:00' , @enddate='2018-01-03 00:00:00'


; with tempSet as 
(
    select 
    transitionDatetime=l.transitionDate,
    gateName=g.gateName,
    staffid=l.staffid,
    idx=
         row_number() over(partition by l.staffid order by l.transitionDate ) -
        row_number() over(partition by l.staffid,cast(l.transitionDate as date) order by l.transitionDate ),
    transitionDate=cast(l.transitionDate as date)
    from
    logs l inner join staff s on
    l.staffid=s.staffid and staffType='Student'
    join gate g on g.gateid=l.gateid
)
, groupedSet as
(
    select 
    t1.*,
    FirstGateName=t2.gatename,
    lastGateName=t3.gatename
    from
    (
        select
        staffid,
        mintransitionDate=min(transitionDatetime),
        maxtransitionDate= case when count(1)>1 then max(transitionDatetime) else null end,
        transitionDate=max(transitionDate),
        idx
        from
        tempSet 
        group by staffid,idx
    ) t1
    left join
    tempSet t2
    on t1.idx=t2.idx 
    and t1.staffid=t2.staffid and t1.mintransitionDate=t2.transitionDatetime
     left join
    tempSet t3
    on t1.idx=t3.idx 
    and t1.staffid=t3.staffid and t1.maxtransitionDate=t3.transitionDatetime
    where t1.transitionDate between @startdate and @enddate
 )

 select
 t.*,
 g.mintransitionDate,
 g.maxtransitionDate,
 g.FirstGateName,
 g.LastGateName
 from 
 groupedSet g
 right join
 (
     select 
         d,
         staffid
     from
     (
         select 
         top  (select datediff(d,@startdate, @endDate))
         d=dateadd(d,row_number() over(order by (select null))-1, @startDate)
         from
         sys.objects o1 cross join sys.objects o2
     )tally
          cross join
     staff 
     where staff.stafftype='Student'
    )t
 on cast(t.d as date)=cast(g.transitionDate as date) and t.staffid=g.staffid
 order by t.d asc, t.staffid asc

這篇關于T-SQL 最大日期和最小日期值單行的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Modify Existing decimal places info(修改現有小數位信息)
The correlation name #39;CONVERT#39; is specified multiple times(多次指定相關名稱“CONVERT)
T-SQL left join not returning null columns(T-SQL 左連接不返回空列)
remove duplicates from comma or pipeline operator string(從逗號或管道運算符字符串中刪除重復項)
Change an iterative query to a relational set-based query(將迭代查詢更改為基于關系集的查詢)
concatenate a zero onto sql server select value shows 4 digits still and not 5(將零連接到 sql server 選擇值仍然顯示 4 位而不是 5)
主站蜘蛛池模板: 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 生鲜配送系统-蔬菜食材配送管理系统-连锁餐饮订货配送软件-挪挪生鲜供应链管理软件 | 航空连接器,航空插头,航空插座,航空接插件,航插_深圳鸿万科 | 中宏网-今日新闻-财经新闻| 水热合成反应釜-防爆高压消解罐-西安常仪仪器设备有限公司 | 密封无忧网 _ 专业的密封产品行业信息网| 真空冷冻干燥机_国产冻干机_冷冻干燥机_北京四环冻干 | 罐体电伴热工程-消防管道电伴热带厂家-山东沃安电气 | 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | 深圳APP开发_手机软件APP定制外包_小程序开发公司-来科信 | 不锈钢螺丝,不锈钢螺栓,不锈钢标准件-江苏百德特种合金有限公司 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 拖链电缆_柔性电缆_伺服电缆_坦克链电缆-深圳市顺电工业电缆有限公司 | 全屋整木定制-橱柜,家具定制-四川峨眉山龙马木业有限公司 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 楼承板设备-楼承板成型机-免浇筑楼承板机器厂家-捡来 | 无水硫酸铝,硫酸铝厂家-淄博双赢新材料科技有限公司 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | 烟台螺纹,烟台H型钢,烟台钢材,烟台角钢-烟台市正丰金属材料有限公司 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 保定市泰宏机械制造厂-河北铸件厂-铸造厂-铸件加工-河北大件加工 | 三氯异氰尿酸-二氯-三氯-二氯异氰尿酸钠-优氯净-强氯精-消毒片-济南中北_优氯净厂家 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 北京公寓出租网-北京酒店式公寓出租平台 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 消电检公司,消电检价格,北京消电检报告-北京设施检测公司-亿杰(北京)消防工程有限公司 | 电动手术床,医用护理床,led手术无影灯-曲阜明辉医疗设备有限公司 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 企业VI设计_LOGO设计公司_品牌商标设计_【北京美研】 | 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 |