【问题标题】:SQL Find accounts with no collection activity in the last 45 daysSQL 查找过去 45 天内没有收款活动的帐户
【发布时间】: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


【解决方案1】:

您可以使用 5 路联合。它相当冗长,但它会成功。请注意,它仍然使用五个选择,所以它不会更有效率(事实上,我怀疑它可能效率较低)。它只允许一个查询和一个结果集:

SELECT PatId,
  'xrxTrnLgr' AS tablename,
  'Balance' AS key1, Balance AS value1,
  NULL AS key2, NULL AS value2,
  NULL AS key3, NULL AS value3
FROM xrxTrnLgr
WHERE (xrxTrnLgr.Balance>$.01)
UNION ALL
SELECT PatId,
  'xrxPat' AS tablename,
  'Coverage' AS key1, Coverage AS value1,
  'DctId' AS key2, DctId AS value2,
  'EntryDate' AS key3, EntryDate AS value3
FROM  xrxPat
WHERE (xrxPat.EntryDate>{ts '2008-01-01 00:00:00'})
UNION ALL
SELECT PatId,
  'xrxPatNotes' AS tablename,
  'RecNo' AS key1, RecNo AS value1,
  'NoteDate' AS key2, NoteDate AS value2,
  'UserId' AS key3, UserId AS value3
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
UNION ALL
SELECT PatId,
  'xrxTrnicf' AS tablename,
  'UserId' AS key1, UserId AS value1,
  'PostDate' AS key2, PostDate AS value2,
  NULL AS key3, NULL AS value3
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
UNION ALL
SELECT PatId,
  'xrxTrnpay' AS tablename,
  'UserId' AS key1, UserId AS value1,
  'PostDate' AS key2, PostDate AS value2,
  NULL AS key3, NULL AS value3
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
ORDER BY PatId  

这将返回一个包含列(tablenamePatIdkey1value1key2value2key3value3)的结果集。 tablename 结果将告诉您如何解释键/值对结果。

【讨论】:

  • Ben,我试过了,但在关键字“Union”附近出现语法错误我删除了说此查询是为了获取最新声明等的行,但仍然出现此错误。有什么建议吗?
  • @MichaelSigman,哎呀,我也删除了说“这个查询”的行。之后它应该可以工作,你能发布确切的错误信息吗?上下文可能会帮助我找到错误。
  • 关键字“UNION”附近的语法不正确。我在 powerpivot 中添加查询,所以这是我得到的唯一错误。它没有给我更多细节。对不起。顺便说一句,我非常感谢您的帮助。
  • @Michael Sigman & Ben Lee:ORDER BY 查询中不能有多个 ORDER BY 子句。 ORDER BY 不得超过一个(在查询的末尾),它将应用于整个结果集。
  • @AndriyM,呃,错过了。只是需要另一双眼睛。谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
相关资源
最近更新 更多