【发布时间】:2016-07-08 10:42:27
【问题描述】:
我正在开发一个存储过程,但是,当我运行它时,我丢失了一些数据。我知道原因,但我很难弄清楚......这是我的代码:
INSERT INTO tempIntake (Pop, PlanID, PopFull, ApptDate, [1stAppt], Followup, Rn, UserID)
SELECT Pop, PlanID, PopFull, InterviewDate, 1 stAppt, Followup, rn, @UserID
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY PlanID ORDER BY AddedDate ASC) AS rn
FROM VInfo
WHERE AddedDate IS NOT NULL
) t
WHERE rn = 1 AND interviewdate >= @fromDate AND interviewDate <= @toDate
所以我在这里尝试做的是......对于某些 PLANID,我没有添加日期。因为我正在按 AdditionalDate 进行过滤,并且如果为 null - 此数据不会出现 - 即使我需要显示它。在这种情况下,我想通过这种方式将其设置为像 '1/1/2016' 这样的虚拟日期,当实际的 AddedDate 在表中可用时,它将被使用而不是虚拟日期。
【问题讨论】:
-
这听起来可能很奇怪,但你不能……删除
where AddedDate is not null吗? -
我所做的更奇怪。对于某些 PlanId,我有多个值(在某些情况下,addeddate = null 和实际日期)。当我按 PlanID orderBy addedDate ASC 分区时,没有 where addeddate 不为空,我似乎提取了所有 NULL 值 - 当我实际上需要提取 MIN 日期时。我不知道为什么会这样。我需要做的基本上是指定日期何时为 NULL,然后将其设为 2016 年 1 月 1 日——一切都会好的。数据不会出现在数千条记录中
-
好吧,然后使用
OVER(PARTITION BY PlanId ORDER BY ISNULL(AddedDate,GETDATE()))并删除where AddedDate is not null -
张贴作为答案,我会接受。谢谢
标签: sql-server select stored-procedures case