Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
405 views
in Technique[技术] by (71.8m points)

sql server - Self-Join table on previous date - Left Outer Join Version for Outer Apply

MSSQL Server 2017

Table:

CREATE TABLE [T1] 
(
    ID decimal(28,6) NULL,
    S_DATE datetime  NULL,
    AMOUNT decimal(28,6) NULL,
);

INSERT INTO T1 (ID, S_DATE, AMOUNT)
VALUES (1, '2020-01-01', NULL),
       (1, '2020-01-02', 200),
       (1, '2020-01-03', 300),
       (1, '2020-01-04', 400),
       (1, '2020-01-05', 500);

Simple SELECT * from T1 prints:

+----+----------------------+--------+
| ID |        S_DATE        | AMOUNT |
+----+----------------------+--------+
|  1 | 2020-01-01T00:00:00Z | (null) |
|  1 | 2020-01-02T00:00:00Z | 200    |
|  1 | 2020-01-03T00:00:00Z | 300    |
|  1 | 2020-01-04T00:00:00Z | 400    |
|  1 | 2020-01-05T00:00:00Z | 500    |
+----+----------------------+--------+

I would like to achieve a self-join to match the amount of a date with that of the previous date in one row like this:

+----+----------------------+--------+------------------+
| ID |        S_DATE        | AMOUNT | AMOUNT_LAST_DATE |
+----+----------------------+--------+------------------+
|  1 | 2020-01-01T00:00:00Z | (null) | (null)           |
|  1 | 2020-01-02T00:00:00Z | 200    | (null)           |
|  1 | 2020-01-03T00:00:00Z | 300    | 200              |
|  1 | 2020-01-04T00:00:00Z | 400    | 300              |
|  1 | 2020-01-05T00:00:00Z | 500    | 400              |
+----+----------------------+--------+------------------+

Working outer apply:

SELECT t1.*,t2.Amount from t1
OUTER APPLY (SELECT TOP 1 t2.AMOUNT
             FROM t1 as t2
             WHERE T1.ID = T2.ID
             AND T2.S_DATE < T1.S_DATE
             ORDER BY T2.S_DATE DESC) t2;

What would the left out join look like?

SQL-FIDDLE: LINK

question from:https://stackoverflow.com/questions/65889335/self-join-table-on-previous-date-left-outer-join-version-for-outer-apply

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...