【发布时间】:2019-08-16 02:57:30
【问题描述】:
我正在尝试找到一种方法来动态更改最早日期字段的日期,所以如果 TotalShipped = TotalOrdered 那么我想取最早的日期这两个字段不相等。
这是当前数据的示例
CREATE TABLE mytable (
fsono INT
, NAME VARCHAR(30)
, TS int
, [TO] int
, [Date] date
);
INSERT INTO mytable (fsono, NAME, TS, [TO], [Date])
VALUES
(1,'039069',1,1,'2019-3-19')
, (2,'039069',1,1,'2019-3-19')
, (3,'039069',1,0,'2019-3-20')
, (4,'039069',1,0,'2019-3-21');
SELECT
sorels.fsono,
sorels.finumber,
sorels.frelease,
fshipbook+fshipbuy+fshipmake as totalshipped,
fjoqty + fbook + fbqty as totalordered,
sorels.fduedate
FROM m2mdata35.dbo.sorels
INNER JOIN somast on sorels.fsono=somast.fsono
INNER JOIN soitem on sorels.fsono=soitem.fsono AND sorels.finumber=soitem.finumber
LEFT JOIN inmastx on soitem.fpartno=inmastx.fpartno and soitem.fpartrev=inmastx.frev
LEFT JOIN jomast on sorels.fstatus=jomast.fjobno
LEFT JOIN slcdpmx on somast.fcustno=slcdpmx.fcustno
LEFT JOIN syphon ON somast.fcontact=syphon.fcontact AND somast.fcustno=syphon.fcsourceid
WHERE LEFT(somast.fstatus,1)<>'C' and fsocoord<>'IFP' and fsocoord<>'711'
and somast.fsono='039069'
Order By sorels.fsono, sorels.fduedate, sorels.finumber, sorels.frelease
这就是我想要的结果
CREATE TABLE myresults (
fsono INT
, NAME VARCHAR(30)
, TS int
, [TO] int
, [Date] date
, Earliest_Date date
);
INSERT INTO myresults (fsono, NAME, TS, [TO], [Date], Earliest_Date)
VALUES
(1,'039069',1,1,'2019-3-19','2019-3-20')
, (2,'039069',1,1,'2019-3-19','2019-3-20')
, (3,'039069',1,0,'2019-3-20','2019-3-20')
, (4,'039069',1,0,'2019-3-21','2019-3-20');
【问题讨论】:
-
MyTable 与该查询有什么关系?此外,您的 where 子句中有围绕列的函数。这会使您的查询成为非 SARGable,并且没有任何索引可以帮助您。
-
@SeanLange 只是一些示例数据,以便人们可以复制我正在尝试做的事情。
-
好的,但是样本数据完全脱离了上下文,至少对我来说,它在这里的关系是没有意义的。您真正要发布的是与查询相关的一些示例数据。
标签: sql-server tsql sql-server-2008-r2