我有一个名为transaction的SQL表,其中存储了不同类型的事务,例如付款安排,寄信等。 我运行了一个查询:
SELECT TOP 6 Case_Ref as Case Ref,TrancRefNO as Tranc RefNO, Date_CCYYMMDD, LetterSent, Arr_Freq,
SMS_Sent_CCYYMMDD
From Transaction
Where (LEN(LetterSent ) >0 OR Arr_Freq >0)
表格看起来像这样
Case Ref Tranc RefNO Date_CCYYMMDD LetterSent Arr_Freq SMS_Sent_CCYYMMDD
-------- ----------- ---------- ---------- ---------- -----------------
15001 100 20140425 Stage1
15001 101 20140430 Stage2
15001 102 20140510 30
15001 104 20140610 30
15002 105 20140425 Stage1
15002 106 20140610 30
从表格中,我可以清楚地看到,案件15001在'20140430'上发了一封信,并且该人在'20140510'上开始安排。并且在'20140425'上发送了一封关于案件15001的信件,并且该人在'20140610'上作了安排。
我正在尝试使用C#创建一份excel报告,该报告将显示收到信件后收到安排的案件总数以及收到短信后的安排案件总数。
我试过了
select MAX(ROW_NUMBER() OVER(ORDER BY o3.Date_CCYYMMDD ASC)), o3.
from
(
select o.TrancRefNO, o.Date_CCYYMMDD , sq.LetterSent
from Transaction o
join Transaction sq on sq.TrancRefNO= o.TrancRefNO
and sq.Date_CCYYMMDD <= o.Date_CCYYMMDD
where o.Arr_Freq >0
and len(sq.LetterSent ) > 0
) o2
join Transaction o3 on o3.TrancRefNO= o2.TrancRefNO
但是给了我一个错误:
Msg 4109, Level 15, State 1, Line 2
Windowed functions cannot be used in the context of another windowed function or aggregate.
P.s Title将需要更改,因为我不知道该怎么称呼它。
答案 0 :(得分:0)
SELECT * FROM table as t1
WHERE (LetterSent != '' OR SMS_SENT_CCYYMMDD != '')
AND (SELECT COUNT(*) FROM table AS t2
WHERE t1.case_ref = t2.case_ref
AND t1.DATE_CCYYMMDD < t2.DATE_CCYYMMDD
AND Arr_freq > 0) > 1
我的假设基于我可以从你的帖子中收集到的内容:
希望这会有所帮助。我在评论中不确定你的第二个问题(最长日期)。你需要再解释一下。
答案 1 :(得分:0)
SELECT * FROM table where Date =
(SELECT MIN(Date) from table)
答案 2 :(得分:0)
SELECT TOP 1 ROW_NUMBER() OVER(ORDER BY Date_CCYYMMDD ASC), mytable.*
FROM mytable
或只是
SELECT TOP 1 * FROM mytable
ORDER BY Date_CCYYMMDD ASC
但我想,你想要的不是整体的MIN日期,而是分组第一