Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用SQL选择日期最近的行_Sql Server_Date_Exists - Fatal编程技术网

Sql server 使用SQL选择日期最近的行

Sql server 使用SQL选择日期最近的行,sql-server,date,exists,Sql Server,Date,Exists,我有一个SQL语句 SELECT ID, LOCATION, CODE,MAX(DATE),FLAG FROM TABLE1 WHERE DATE <= CONVERT(DATETIME,'11-11-2012') AND EXISTS (SELECT * FROM #TEMP_CODE WHERE TABLE1.CODE = #TEMP_CODE.CODE) AND ID IN (14, 279) GROUP BY

我有一个SQL语句

SELECT 
    ID, LOCATION, CODE,MAX(DATE),FLAG 
FROM 
    TABLE1 
WHERE 
     DATE <= CONVERT(DATETIME,'11-11-2012') 
     AND EXISTS (SELECT * FROM #TEMP_CODE WHERE TABLE1.CODE = #TEMP_CODE.CODE) 
     AND ID IN (14, 279)
GROUP BY 
     ID, LOCATION, CODE
我只想显示日期小于或等于给定日期的行。要求的结果是

ID     LOCATION              CODE            DATE              FLAG
-------------------------------------------------------------------
14  CAR STREET,UDUPI         234      2012-08-10 00:00:00.000   1
279 MADHUGIRI                234      2012-08-11 00:00:00.000   0

这与您要求的结果不一致,但我认为这些结果是错误的,我认为您应该检查它们。

按日期限制0,2添加订单

使用order by,您将按照最接近您的条件进行日期排序,其中,使用限制将仅返回前2个值

SET ROWCOUNT 2  
SELECT 
    ID, LOCATION, CODE,MAX(DATE),FLAG 
FROM 
    TABLE1 
WHERE 
     DATE <= CONVERT(DATETIME,'11-11-2012') 
     AND EXISTS (SELECT * FROM #TEMP_CODE WHERE TABLE1.CODE = #TEMP_CODE.CODE) 
     AND ID IN (14, 279)
GROUP BY 
     ID, LOCATION, CODE
ORDER BY DATE

使用子查询获取每个ID的最大日期,然后将其连接到表:

SELECT 
    ID, LOCATION, CODE, DATE, FLAG 
FROM 
    TABLE1 
JOIN (
    SELECT ID AS SubID, MAX(DATE) AS SubDATE 
    FROM TABLE1 
    WHERE DATE < '11/11/2012'
        AND EXISTS (SELECT * FROM #TEMP_CODE WHERE TABLE1.CODE = #TEMP_CODE.CODE) 
        AND ID IN (14, 279)
    GROUP BY ID
    ) AS SUB ON ID = SubID AND DATE = SubDATE

首先,您为什么使用“11-11-2012”作为日期格式?试试“20121111”。还有,为什么第一排是8月10日而不是8月14日?@Aaron Bertrand我将此作为用户输入。我甚至尝试使用20121111格式,但没有运气返回表中的所有五列记录都是@AdRock LIMIT,SQL Server中不存在。那么,您能解释一下为什么ID=14的“2012-08-10”比“2012-08-14”更接近吗?这正是我认为SQL Server中不存在LIMIT的原因,也没有任何ANSI/ISO SQL标准我没有看到它是SQL因此,这种方式仅更改设置行数2的限制。而ID的硬编码就是他的sql查询。我刚刚添加了订单。这仍然不起作用。您还需要按标志分组,在这种情况下,您可能根本得不到正确的结果,或者您可以对其执行MIN/MAX,但可能会为特定行获得错误的标志。如果我按标志分组,我会得到两行ID为14的数据,而没有行ID为279的数据。如果I MAX flag,我必须转换为tinyint,我得到的标志是1,而不是预期的0。所需的结果应该是小于20121111的行和最接近的行20121111@Prince20120814不是比20120810更接近2012111吗?或者,您是否可以用另一种方式解释为什么要使用带有20120810的行而不是带有20120814的行?我只能用很多种方式问这个问题——现在已经问了3到4次了。请解释清楚。
ID  LOCATION         CODE [Date]     FLAG
--- ---------------- ---- ---------- ----
14  CAR STREET,UDUPI 234  2012-08-14 0
279 MADHUGIRI        234  2012-08-11 0
SET ROWCOUNT 2  
SELECT 
    ID, LOCATION, CODE,MAX(DATE),FLAG 
FROM 
    TABLE1 
WHERE 
     DATE <= CONVERT(DATETIME,'11-11-2012') 
     AND EXISTS (SELECT * FROM #TEMP_CODE WHERE TABLE1.CODE = #TEMP_CODE.CODE) 
     AND ID IN (14, 279)
GROUP BY 
     ID, LOCATION, CODE
ORDER BY DATE
SELECT 
    ID, LOCATION, CODE, DATE, FLAG 
FROM 
    TABLE1 
JOIN (
    SELECT ID AS SubID, MAX(DATE) AS SubDATE 
    FROM TABLE1 
    WHERE DATE < '11/11/2012'
        AND EXISTS (SELECT * FROM #TEMP_CODE WHERE TABLE1.CODE = #TEMP_CODE.CODE) 
        AND ID IN (14, 279)
    GROUP BY ID
    ) AS SUB ON ID = SubID AND DATE = SubDATE