如何从该结果编写sql查询?
我不确定我的问题的标题是什么,对此我很抱歉 我正在尝试编写一个SQL查询,以获得应该从药店报销的会员人数 例如:我去了药房,我接种了疫苗,但我错了,我从口袋里掏钱了。所以现在药房需要偿还我那笔钱。假设我有如下数据:如何从该结果编写sql查询?,sql,Sql,我不确定我的问题的标题是什么,对此我很抱歉 我正在尝试编写一个SQL查询,以获得应该从药店报销的会员人数 例如:我去了药房,我接种了疫苗,但我错了,我从口袋里掏钱了。所以现在药房需要偿还我那笔钱。假设我有如下数据: MemberId Name ServiceDate PresNumber PersonId ClaimId AdminFee(in $) 1 John 1/1/2011 123 345
MemberId Name ServiceDate PresNumber PersonId ClaimId AdminFee(in $)
1 John 1/1/2011 123 345 456 0
1 John 1/21/2011 123 345 987 20
2 Mike 2/3/2011 234 567 342 0
2 Mike 2/25/2011 234 567 564 30
5 Linda 1/4/2011 432 543 575 0
5 Linda 4/6/2011 987 543 890 0
6 Sonia 2/6/2011 656 095 439 0
该数据显示了该药店所有获得报销和未报销的会员
我需要找出AdminFee为0的成员,但我还需要检查同一成员的另一个记录,该成员具有相同的号码、相同的个人ID,其中ServiceDate在原始记录的30天内。
如果另一条记录符合此条件,并且AdminFee字段包含的值不是0,则表示此人已报销。所以从数据中你可以看到约翰和迈克已经报销了,琳达和索尼娅需要报销
有谁能帮我写一个SQL查询吗?您需要在SQL Server中使用datediff函数作为参数来传递日期,并通过其他别名加入上表。我没有SQL Server,但我认为应该是这样
Select memberid
from PaymentLog p
inner join PaymentLog d on p.serviceid = d.serviceid
and p.memberid = d.memberid
and p.personid = d.personid
Where adminfee = 0
and datediff(day, p.servicedate, d.servicedate) < 30
我调用了一个表paymentlog您没有提到您使用的是什么SQL引擎,所以这里有一些通用的SQL。您需要根据所使用的引擎调整第二个选项中的日期数学和返回真/假:
-- Already reimbursed
SELECT * FROM YourTable YT1 WHERE AdminFee = 0 AND EXISTS
(SELECT * FROM YourTable YT2
WHERE YT2.MemberID = YT1.MemberID AND
YT2.PresNumber = YT1.PresNumber AND
YT2.ServiceDate >= YT1.ServiceDate - 30 AND
AdminFee > 0)
-- Need reimbursement
SELECT * FROM YourTable YT1 WHERE AdminFee = 0 AND NOT EXISTS
(SELECT * FROM YourTable YT2
WHERE YT2.MemberID = YT1.MemberID AND
YT2.PresNumber = YT1.PresNumber AND
YT2.ServiceDate >= YT1.ServiceDate - 30 AND
AdminFee > 0)
或
注意:刚刚编辑了这篇文章,以反映您正在寻找同一处方号的事先报销的要求,而我最初错过了这一要求。
-- Both in one.
SELECT YT1.*,
CASE WHEN YT2.MemberID IS NULL THEN False ELSE True END AS AlreadyReimbursed
FROM YourTable YT1 JOIN YourTable YT2 ON
YT1.MemberID = YT2.MemberID AND
YT1.PresNumber = YT2.PresNumber AND
YT1.ServiceDate <= YT2.ServiceDate + 30
WHERE YT1.AdminFee = 0 AND YT2.AdminFee > 0)