SQL子查询Access - 前一个

时间:2017-03-15 06:13:45

标签: sql ms-access

希望有人可以帮我解决我想在Access中进行的查询。我有一个包含三列和一个值列的表。它涉及有多个版本的财务数据,因此对于B2C / SI_01 / INP01,我有例如具有不同时间戳的四个版本。我怎样才能通过子查询,查询"之前的" B2C / SI_01 / INP01组合的时间戳?我尝试了几次顶级n-2,降序排序,而不是像最大时间戳,但我似乎没有得到sql正确。

enter image description here

到目前为止,我的代码是:

<form id="registerForm">
            <input type="text" pattern="[A-Za-z]{1,20}" placeholder="First Name" name="guestFName" title="Up to 20 alphabetical characters" required>
            <input type="text" pattern="[A-Za-z]{1,20}" placeholder="Last Name" name="guestLName" title="Up to 20 alphabetical characters" required>
            <input type="email" placeholder="Email" name="guestEmail" title="Must be a valid email address" required>
            <input type="text" pattern="08[36579]-\d{7}" placeholder="Phone Number" name="guestPhone" title="Must be an irish mobile number of format 08?-7 digits" required>
            <input type="password" pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,20}" placeholder="Password" name="guestPassword" title="Must be 8 or more characters long and contain at least one number and one uppercase letter" required>
            <br>
            <input type='button' id='btnRegeister' value='Register'/>
</form>

$(document).ready(function(){
    $("#btnRegeister").click(function() 
    {
       $.ajax(
       {
           url: "URL_GOES_HERE",
           data: $('#registerForm').serialize(),
           type: 'POST',
           async: false
       })
       .done(function(response) 
       {
           console.log(response);

           var result = JSON.parse(response);      
       })
   });
});

提前致谢,

米希尔

1 个答案:

答案 0 :(得分:1)

一种选择是在查询中使用TOP 2,按时间戳降序排序,然后排除最大(最后)时间戳记录。

SELECT TOP 2 [N-1], SI_Initiative, LineCode, Timestamp
FROM TBL_VC_DATA t1
WHERE t1.Timestamp <> (SELECT MAX(t2.Timestamp)
                       FROM TBL_VC_DATA t2
                       WHERE t2.timestamp <> t1.timestamp AND
                             t2.[N-1] = t1.[N-1] AND
                             t2.SI_Initiative = t1.SI_Initiative AND
                             t2.LineCode = t1.LineCode)
ORDER BY t1.Timestamp DESC

您在WHERE的子查询的WHERE t2.timestamp <> t1.timestamp子句中的添加是好的,因为如果有时间,它将允许上述查询返回两个记录关于时间戳值的最后一个和倒数第二个记录之间。