我需要从表中提取交易记录,如果它是类型'C'并且记录发布时间大于或等于类型为'W'的记录的发布时间,其中帐号和发布日期是相同。我正在努力创建一个if / then,其中类型'C'>的发布时间=类型'W'的posttime ...任何帮助将不胜感激。我之前已经完成了这些类型,但从来没有用过只有一个记录项不同的字段。
答案 0 :(得分:1)
这是使用exists
的典型方法:
select * from transactions t
where t.actioncode = 'C' and exists (
select 1 from transactions t2
where t2.account_num = t.account_num and t2.postdate = t1.postdate
and t2.actioncode = 'W'
and t2.posttime < t1.posttime
)
答案 1 :(得分:0)
这是我原来的,但它只是在没有结果的SSMS中搅动。基本上,我只需要返回所有'C'类型的记录,其中有一个'W'类型的记录,其中的邮政时间小于'C',但记录的帐号和后期是相同的。 posttime,postdate,type和number是我表格中的所有字段。
SELECT *
FROM TRANSACTIONS
WHTION ACTIONCODE ='C'和POSTTIME&gt; = POSTTIME和ACTIONCODE ='W'
答案 2 :(得分:0)
如果我理解正确,您所描述的内容可以通过JOINS
完成。
想一想relational data sets
和SARGs
。
虽然你还没有给我们一个表格结构(这有很大帮助),但解决方案可以帮助你引导你朝着正确的方向前进。以下假定FACT
TRANSACTIONS
表为carnality
,其中SELECT TOP 1000 A.ACTIONCODE, A.TRAN_RECORD --, any other needed columns
FROM TRANSACTIONS A
INNER JOIN (SELECT ACTIONCODE, POSTTIME, ACCOUNT_NUM, POSTDATE
FROM TRANSACTIONS
WHERE ACTIONCODE = 'W') B ON A.ACCOUNT_NUM = B.ACCOUNT_NUM
AND A.POSTDATE = B.POSTDATE
WHERE A.ACTIONCODE = 'C'
AND A.POSTTIME >= B.POSTTIME
本身为M:M
dff<- c("", "P42356;Q8N8J0;A4QPH2", "P67809;Q9Y2T7", "Q08554", "Q13835",
"Q5T749", "Q9NZT1")
library(splitstackshape)
cSplit(data.frame(dff), 'dff', ";")
# dff_1 dff_2 dff_3
# 1: NA NA NA
# 2: P42356 Q8N8J0 A4QPH2
# 3: P67809 Q9Y2T7 NA
# 4: Q08554 NA NA
# 5: Q13835 NA NA
# 6: Q5T749 NA NA
# 7: Q9NZT1 NA NA
更新:我意外忘记包含正确的列数。始终指定您将在INNER JOIN中使用的相同列(或*,如果您不关心)。
无论如何,我们仅通过返回我们将在查询中使用或查看的结果来优化查询。