返回Vales时

时间:2016-08-05 16:41:02

标签: sql sql-server date casting maxdate

我被困在这里,伙计们。

我有两个表,每个表都有一个日期列。一个表使用时间戳(2016-08-05 09:16:11.000)另一个表有时间戳但是没有使用它(2016-08-05 00:00:00.000)

我想加入这些表并从每个表返回MAX日期,但仅在MAX日期匹配时返回。如果一列具有更新的日期,则在两列都具有匹配的最大日期时显示结果。

我尝试MAX和CAST(删除时间戳),但我只能从每个表中撤回MAX日期。所以当两张桌子的最大日期不同时,它没有向我显示相同的日期。

这是我的例子

SELECT A.ID,
CAST(A.DATE as date),
CAST(B.DATE as date),
B.NUMBER,
A.VALUE,

FROM TABLE1 A
JOIN TABLE 2 B
ON A.ID = B.ID

Where b.DATE=(SELECT MAX(DATE)
FROM TABLE B
WHERE ID = b.ID) 

Where A.DATE=(SELECT MAX(DATE)
FROM TABLE A
WHERE ID = b.ID) 

我希望我的结果是这样的:

ID | (no column name)| (no column name) | Number| Value |
1  | 2016-08-04      | 2016-08-04       | 42    | 77    | 
2  | 2016-08-04      | 2016-08-04       | 43    | 40    | 
3  | 2016-08-04      | 2016-08-04       | 44    | 42    | 

但是当他们没有相同的最长日期时,我会得到这个

ID | (no column name)| (no column name) | Number| Value |
1  | 2016-08-04      | 2016-08-05       | 42    | 47    | 
2  | 2016-08-04      | 2016-08-05       | 43    | 43    | 
3  | 2016-08-04      | 2016-08-05       | 44    | 44    | 

希望我清楚自己。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

以下是使用row_number的一个选项:

SELECT * 
FROM (
    SELECT A.ID,
           CAST(A.DATE as date),
           CAST(B.DATE as date),
           B.NUMBER,
           A.VALUE,
           ROW_NUMBER() OVER (PARTITION BY A.ID ORDER BY A.Date DESC) rn
    FROM TABLE1 A 
           JOIN TABLE 2 B ON A.ID = B.ID
                        AND CAST(A.DATE as date) = CAST(B.DATE as date)
) t
WHERE rn = 1