繁体   English   中英

SQL查询操作顺序

[英]SQL Query Order of Operations

星期五。 我的大脑炸了。 这很简单,我为此感到asking愧:

我只是想查询我的事件表(它的开始时间为非空且结束时间为空),但是,在进行单元测试的情况下,我不断获得2条记录(分别是2:00和4:00记录)就像我期望的2:00一样)

SELECT 
    EventId, 
    TaskId, 
    MachineId, 
    LoginId, 
    EventStartTimeUtc, 
    EventEndTimeUtc, 
    OpCode, 
    UnitId, 
    PositionId, 
    WebId, 
    Comment, 
    MakereadyCount, 
    GrossCount, 
    NetCount, 
    PerpetualGross, 
    PerpetualNet, 
    PerpetualMakeready, 
    TaskState, 
    EventTypeId, 
    IsAutoEvent, 
    IsTransferred, 
    LastUpdatedTimeUtc
FROM Event
WHERE MachineId = #MachineId# 
    AND EventStartTimeUtc >= #StartTimeUtc# 
    AND (EventEndTimeUtc IS NULL 
        OR ((EventEndTimeUtc IS NOT NULL) AND EventEndTimeUtc <![CDATA[<=]]> #EndTimeUtc#))
[Test]
public void ShouldSelectEventsInRange()
{
    //Arrange
    TaskDto testTask = _testRepository.CreateTask(new TaskDto { TaskId = 1234567 }, true);

    var machineId = ((ArtemisRepository)_testRepository).CreateMachine(123, "MR40SIM", "0V7", 200, 100, 555555); //Requires a 555555 down-task to exist in database

    EventRecordDto result = _testRepository.CreateEvent(new EventRecordDto {TaskId = testTask.TaskId, MachineId = machineId, EventStartTimeUtc = new DateTime(2014, 4, 15, 1, 50, 0), OpCode = "100", MakereadyCount = 1752, GrossCount = 5660, NetCount = 2512, Comment = "Test Event", IsAutoEvent = false, IsTransferred = false});
    EventRecordDto result2 = _testRepository.CreateEvent(new EventRecordDto {TaskId = testTask.TaskId, MachineId = machineId, EventStartTimeUtc = new DateTime(2014, 4, 15, 2, 0, 0), OpCode = "100", MakereadyCount = 1752, GrossCount = 5660, NetCount = 2512, Comment = "Test Event", IsAutoEvent = false, IsTransferred = false});
    EventRecordDto result3 = _testRepository.CreateEvent(new EventRecordDto {TaskId = testTask.TaskId, MachineId = machineId, EventStartTimeUtc = new DateTime(2014, 4, 15, 4, 0, 0), OpCode = "100", MakereadyCount = 1752, GrossCount = 5660, NetCount = 2512, Comment = "Test Event", IsAutoEvent = false, IsTransferred = false});

    //Act
    var results = _testRepository.SelectEventsInRange(machineId, new DateTime(2014, 4, 15, 2, 0, 0), new DateTime(2014, 4, 15, 3, 59, 59));

    //Assert
    Assert.IsTrue(results.Count == 1, "{0} records came, instead of the 1 record expeted!", new object[] { results.Count });
    Assert.IsTrue(results.Any(r => r.EventId == result2.EventId), "Expected Event (Id: {0}), Actual Event (ID: {1})", new object[] { result2.EventId, results[0].EventId});
}

该查询将询问EventStartTimeUtc大于或等于2:00的记录(这两个记录都是)以及EventEndTimeUtc为null的记录(两者都是记录)。

您是说EventStartTimeUtc放在WHERE子句中有EventEndTimeUtc吗?

暂无
暂无

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

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