【发布时间】:2012-03-21 00:44:04
【问题描述】:
我有一个练习管理软件,可以将不同的活动存储在不同的表格中。 下面列出。我试图完成的目标是找到有到期余额、处于休眠状态或在过去 30 天内没有任何活动的账户。活动类型包括索赔提交、付款和分类帐单。我通过 exel 中的五个查询和 Vlookup 功能实现了这一点。但是我想用一个 sql 查询干净地做到这一点。可能吗。以下是我目前使用的五个查询。
SELECT xrxTrnLgr.PatId, xrxTrnLgr.Balance,
FROM xrxTrnLgr
WHERE (xrxTrnLgr.Balance>$.01)
ORDER BY xrxTrnLgr.PatId
这个查询是为了得到有余额的病人
SELECT xrxPat.PatId, xrxPat.Coverage, xrxPat.DctId, xrxPat.EntryDate
FROM xrxPat
WHERE (xrxPat.EntryDate>{ts '2008-01-01 00:00:00'})
ORDER BY xrxPat.PatId
此查询用于获取医生 ID
SELECT RecNo, xrxPatNotes.PatId, xrxPatNotes.NoteDate, xrxPatNotes.UserId
FROM xrxPatNotes INNER JOIN
(SELECT xrxPatNotes.PatId, Max (NoteDate) as LastDate
FROM xrxPatNotes
GROUP BY PatId) as B
ON xrxPatNotes.PatId = B.PatId
AND xrxPatNotes.NoteDate = B.LastDate
这个查询是为了获取最近的账本注释
SELECT xrxTrnicf.PatId, xrxTrnicf.UserId ,xrxTrnicf.PostDate
FROM xrxTrnicf INNER JOIN
(SELECT xrxTrnicf.PatId, Max (PostDate) as LastDate
FROM xrxTrnicf
GROUP BY PatId) as B
ON xrxTrnicf.PatId = B.PatId
AND xrxTrnicf.PostDate = B.LastDat
这个查询是为了获取最近提交的索赔
SELECT xrxTrnpay.PatId, xrxTrnpay.UserId ,xrxTrnpay.PostDate
FROM xrxTrnpay INNER JOIN
(SELECT xrxTrnpay.PatId, Max (PostDate) as LastDate
FROM xrxTrnpay
GROUP BY PatId) as B
ON xrxTrnpay.PatId = B.PatId
AND xrxTrnpay.PostDate = B.LastDate
这个查询是为了获取最近的付款
在 exel 中,我然后 VLOOKUP 所有值并从今天减去。然后我创建一个列来获取最小值。
如果有人可以帮助我至少将 sql 查询合并到一个查询中,我将不胜感激。
谢谢
【问题讨论】:
-
能否将您的表定义也显示为“CREATE TABLE”语句?
-
抱歉,我不清楚如何执行此操作。正如我所说,当谈到 SQL 时,我真的是一个新手,并且从我在这个网站上阅读的内容中拼凑出这个解决方案。如果有帮助,数据来自 sql server 2008 中的数据库,表名是 1.xrxtrnpay 2.xrxtrnicf 3.xrxpat 4.xrxtrnlgr 5.xrxpatnotes。我不确定这就是你要找的东西,所以对于我缺乏知识,我提前道歉。
-
好吧,根据我所看到的,我会说你被不同的查询困住了,因为它们返回了不同的 no/type 列。如果您可以返回相同的列,那么 UNION 将满足您的目的
-
@AmitBhargava,一个联合仍然可以在这里使用一点点hackery。请参阅每个答案以了解我的意思。
标签: sql sql-server inner-join