Return Vales when
Return Vales when
伙计们,我被困在这里了。
我有两个 table,每个都有一个日期列。一个 table 正在使用时间戳 (2016-08-05 09:16:11.000) 另一个有时间戳但没有使用它 (2016-08-05 00:00:00.000)
我想加入这些 table 和 return 每个 table 的最大日期,但仅当最大日期匹配时。如果一列具有更新的日期,则在两列具有匹配的最大日期时显示结果。
我正在尝试 MAX 和 CAST(以删除时间戳),但我只能从每个 table 中拉回 MAX 日期。因此,当两个 table 没有相同的最大日期时,它不会向我显示相同的日期。
这是我的例子
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 |
希望我说清楚了。任何帮助将不胜感激。
这是一个使用 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
伙计们,我被困在这里了。
我有两个 table,每个都有一个日期列。一个 table 正在使用时间戳 (2016-08-05 09:16:11.000) 另一个有时间戳但没有使用它 (2016-08-05 00:00:00.000)
我想加入这些 table 和 return 每个 table 的最大日期,但仅当最大日期匹配时。如果一列具有更新的日期,则在两列具有匹配的最大日期时显示结果。
我正在尝试 MAX 和 CAST(以删除时间戳),但我只能从每个 table 中拉回 MAX 日期。因此,当两个 table 没有相同的最大日期时,它不会向我显示相同的日期。
这是我的例子
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 |
希望我说清楚了。任何帮助将不胜感激。
这是一个使用 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