繁体   English   中英

SQL Max()返回多个值

[英]SQL Max() Returning multiple values

早上好/下午,感谢您对此进行检查,我正在努力找出我所缺少的内容。

试图将进度表系统放到结果之外(单独的任务),但由于我们的时间表每天/每周更改几次,因此创建了太多重复项。

Select modified, local_Start_Time, local_End_Time, seg_code, Date, employee

from schedule_table

Where employee= '###' and seg_code = ‘schedule’
and Date in ('20160606', '20160607', '20160608', '20160609') 

group by modified
,local_start_time
,local_end_time
,seg_code
,date
,employee

当我运行它时,将按预期方式获得该

我尝试在“修改后的”选择周围添加max(),以将其限制为最新条目,但这与上面的内容相同。 然后我加了

 max(Local_START_Time)
,max(Local_END_time)
,max(modified)

到选择,这确实将其限制为每位员工1行,但是现在从此[表2] [2]中提取的条目与之相反

我尝试在开始/结束时间从最大到最小调整它,它修复了一些问题而破坏了其他问题。

我对SQL相当陌生,并尝试查看其他问题/视频,但无济于事。 我了解将“ max”修改为最新时间条目,然后从这两个像元中获取max(最高开始/结束时间)的逻辑,但是在理想情况下,我只希望选择一个max(修改)值,然后将其与开始时间和结束时间配对。

任何人都可以用1个max语句,或者如果全部使用3个/完全不同的一个,来指导我正确的方向,以使我无法实现这一目标?

如果我缺少任何其他关键细节,请使用SQL Management Studio和道歉,感谢您的帮助,并希望了解更多信息并帮助他人!

编辑为了阐明我所面临的挑战,“ 更新图像”中 ,绿色的单元格都是每个日期的最新更新时间表,而红色的单元格是最大(开始/结束时间)所捕获的内容。

希望能有所帮助

如果您想要最大值,则应在不使用分组的情况下执行查询,因为您已经为聚合函数中的列设置了最大值

Select max(modified), max(local_Start_Time), max(local_End_Time), seg_code, Date, employee

from schedule_table

Where employee= '###' and seg_code = ‘schedule’
and Date in ('20160606', '20160607', '20160608', '20160609') 

group by seg_code
,date
,employee 

为了获得与max(modified)相关的行,您应该改用子查询

    Select modified, local_Start_Time, local_End_Time, seg_code, Date, employee
    from schedule_table
    where modified = (  select max(modified)
                         from schedule_table
                         Where employee= '###' and seg_code = ‘schedule’
                        and Date in ('20160606', '20160607', '20160608', '20160609') 
    );

然后只得到员工

    Select modified, local_Start_Time, local_End_Time, seg_code, Date, employee
    from schedule_table
    where modified = (  select max(modified)
                         from schedule_table
                         Where employee= '###' and seg_code = ‘schedule’
                        and Date in ('20160606', '20160607', '20160608', '20160609') 
    )
    and employee= '###'
    ;

添加max() ,还需要group by以下方法从group by删除字段:

Select max(modified), max(local_Start_Time), max(local_End_Time),
       seg_code, Date, employee
from schedule_table
where employee= '###' and seg_code = 'schedule' and
      Date in ('20160606', '20160607', '20160608', '20160609') 
group by seg_code, date, employee;

否则,查询将为该列的每个值返回单独的一行-并且max()将只是该行中的值。

所以这就是我得到的:

SELECT DISTINCT 
    [date], 
    employee, 
    max(modified) OVER (PARTITION BY [date]) AS max_modified,
    max(start_time) OVER (PARTITION BY [date]) AS max_start, 
    max(end_time) OVER (PARTITION BY [date]) AS max_end
FROM Table_1
GROUP BY 
    [date], employee, modified, start_time, end_time

或者,如果您想按日期和修改日期分开,

SELECT DISTINCT 
    [date], 
    employee, 
    max(modified) OVER (PARTITION BY [date],employee) AS max_modified, 
    max(start_time) OVER (PARTITION BY [date]) AS max_start, 
    max(end_time) OVER (PARTITION BY [date]) AS max_end
FROM Table_1
GROUP BY [date], employee, modified, start_time, end_time

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM