子查询中的顺序与本机sql查询的行为不同?

时间:2016-11-16 14:54:44

标签: sql sql-server

所以我老实说有点困惑!

我有一个查询返回一组事务,这些事务包含修复成本和主级别修复时的里程表读数。为了获得准确的每英里成本读数,我需要做一个子查询,以获得开始日期和结束日期之间的第一个仪表读数,以及结束仪表。

(select top 1 wf2.ro_num
from wotrans wotr2
left join wofile wf2 
  on wotr2.rop_ro_num = wf2.ro_num 
  and wotr2.rop_fac = wf2.ro_fac
where wotr.rop_veh_num = wotr2.rop_veh_num 
and wotr.rop_veh_facility = wotr2.rop_veh_facility
AND ((@sdate = '01/01/1900 00:00:00' and wotr2.rop_tran_date = 0) 
  OR ([dbo].[udf_RTA_ConvertDateInt](@sdate) <= wotr2.rop_tran_date 
  AND [dbo].[udf_RTA_ConvertDateInt](@edate) >= wotr2.rop_tran_date))
order by wotr2.rop_tran_date asc) as highMeter

我将表格别名为xx2的原因是因为这些表格也在主查询中使用,除了拉出正确的车辆编号和设施外,我不希望这些表格相互影响。

基本上,当我运行主查询时,它返回一个不正确的值;它返回第二个(请记住第一个和第二个具有相同的日期。)但是当我获取子查询并将其复制并粘贴到其自己的查询并运行它时,它返回正确的值。

我确实有这方面的工作,但我只是好奇为什么会发生这种情况。我搜索了很多,发现不多(除了人们不喜欢子查询中的命令)。与我的一个朋友交谈也做了相当多的SQL脚本,它看起来好像子查询的顺序与子查询不同,当你有多个值相同的顺序时(即10个日期的2016年8月5日)。

任何想法都会有所帮助!

就像我说的那样,我有一个可以解决这个案例的工作,但是不知道它是否适用于更大的数据集。

如果您想要更多代码,请告诉我。

0 个答案:

没有答案