September 24, 2017 at 3:01 pm
Hi All,
Need tsql help please. Below is the sample schema/tables and description is written at the end(my requirement).
use master
go
create database banking
go
use banking
go
create table BankBranches
(BranchNo int primary key identity(1,1),
BranchLocation varchar(100)
)
insert into BankBranches(BranchLocation)
select 'United States'
union all
select 'Australia'
union all
select 'South Africs '
go
create table BankAccountType
(AccntTypeid int primary key identity(101,1),
AccntTypeDesc Varchar(100)
)
insert into BankAccountType(AccntTypeDesc)
select 'Savings'
union all
select 'Current'
union all
select 'Fixed Deposit'
union all
select 'Recurring Deposit'
go
create table AccountHolder
(
Accntnum int primary key identity(1001,1),
AccountHolderFirstname varchar(100),
AccountHolderLastname varchar(100),
Address1 varchar(100),
email varchar(30),
Bankbranchid int references BankBranches(BranchNo),
AccountType int references BankAccountType(AccntTypeid)
)
insert into AccountHolder(AccountHolderFirstname,AccountHolderLastname,Address1,email,Bankbranchid,AccountType)
select 'Smith','Allan','US','allan@xyz.com',1,101
union all
select 'Warner','David','Australia','Dwarner@xyz.com',2,102
union all
select 'Jonty','Rhodes','South Africa','Jonty@xyz.com',3,103
go
--1- many relationship between Account and LoanPayment tables.
create table LoanPaymentHistory
(
paymtid int primary key identity(3001,1),
account_no int references AccountHolder(Accntnum),
payment_dt datetime,
amount_paid float,
check_num varchar(100)
)
insert into LoanPaymentHistory(account_no,payment_dt,amount_paid,check_num)
select 1001,getdate(),5000,'AAA1'
union all
select 1001,getdate()+2,10000,'AAA2'
union all
select 1001,getdate()+30,5000,'AAA3'
union all
select 1002,getdate(),10000,'BBB1'
union all
select 1003,getdate(),1000,'CCC1'
union all
select 1003,getdate()+10,5000,'CCC2'
union all
select 1003,getdate()+3,8000,'CCC3'
------------------------------------------------------------------------------------------------------------------------------------
select * From BankBranches
select * From BankAccountType
select * From AccountHolder
select * From LoanPaymentHistory
------------------------------------------------------------------------------------------------------------------------------------
Question : I want to display Account holder details, branch location, type of account . loan payment detail's etc ...
--- My Requiement is: for each account holder I need to get the min(loanpaymentdt) from LoanPaymentHistory tbl. Is there a way, to get the minimum of the loan payment date for each account using GROUP BY clause??
How can we do it ? any differents ways to acheive it? please help !!
select
ah.AccountHolderFirstname+' '+AccountHolderLastname as Fullname,
ah.email,
at.AccntTypeDesc,
bb.BranchLocation
-- get the min() of loan payment date for each accountno
---,min(lph.payment_dt) pymtdt //for this i have to use a GROUP BY
from BankBranches bb
inner join AccountHolder ah on ah.Bankbranchid = bb.BranchNo
inner join BankAccountType at on at.AccntTypeid = ah.AccountType
inner join LoanPaymentHistory lph on ah.Accntnum = lph.account_no
go
Thanks in Advance.
September 24, 2017 at 5:10 pm
Homework? Exam? Interview?
Yes, you can get the minimum loan payment date using Group By.
Gail Shaw
Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability
September 25, 2017 at 2:25 am
What have you tried so far? Could you post the T-SQL you tried that didn't give you the result(s) you were after? We could then tell you where you went wrong and give you a nudge in the right direction.
Thom~
Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
Larnu.uk
September 25, 2017 at 5:13 am
Have you even tried the sample code you posted? Because it sure looks to me that it will fail the integrity constraints.
September 25, 2017 at 6:05 am
gvoshol 73146 - Monday, September 25, 2017 5:13 AMHave you even tried the sample code you posted? Because it sure looks to me that it will fail the integrity constraints.
The sample code does work. Give it a try yourself.
Thom~
Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
Larnu.uk
September 25, 2017 at 6:29 am
Thom A - Monday, September 25, 2017 6:05 AMgvoshol 73146 - Monday, September 25, 2017 5:13 AMHave you even tried the sample code you posted? Because it sure looks to me that it will fail the integrity constraints.The sample code does work. Give it a try yourself.
Yup, my mistake. I thought there was a constraint on branch location country matching the account country. But I see not, and that the account "country" is really the address field.
September 25, 2017 at 11:52 am
Tried it myself.
;With MyCTE as(
SELECT account_no, MIN(payment_dt) AS MinPymtDt
FROM LoanPaymentHistory
GROUP BY account_no
)
select
ah.AccountHolderFirstname+' '+AccountHolderLastname as Fullname,
ah.email,
at.AccntTypeDesc,
bb.BranchLocation,
c.MinPymtDt
from BankBranches bb
inner join AccountHolder ah on ah.Bankbranchid = bb.BranchNo
inner join BankAccountType at on at.AccntTypeid = ah.AccountType
inner join MyCTE c on ah.Accntnum = c.account_no
September 26, 2017 at 2:14 am
As an aside, I'm pretty sure you won't want the amount to be FLOAT as this will not give exact results in calculations.
September 29, 2017 at 9:14 am
Here is my answer based on your code......
.....but the CTE solution is more elegant.
Sorry the code isn't copyable. My browser crashes when I try and paste code directly into the window.
October 3, 2017 at 3:20 am
kevaburg - Friday, September 29, 2017 9:14 AMHere is my answer based on your code......
.....but the CTE solution is more elegant.
Sorry the code isn't copyable. My browser crashes when I try and paste code directly into the window.
vsamantha35 - Monday, September 25, 2017 11:52 AMTried it myself.;With MyCTE as(
SELECT account_no, MIN(payment_dt) AS MinPymtDt
FROM LoanPaymentHistory
GROUP BY account_no
)select
ah.AccountHolderFirstname+' '+AccountHolderLastname as Fullname,
ah.email,
at.AccntTypeDesc,
bb.BranchLocation,
c.MinPymtDt
from BankBranches bb
inner join AccountHolder ah on ah.Bankbranchid = bb.BranchNo
inner join BankAccountType at on at.AccntTypeid = ah.AccountType
inner join MyCTE c on ah.Accntnum = c.account_no
Here is a better approach
select * From AccountHolder a
cross apply(select min(payment_dt) as MinPayDate from LoanPaymentHistory b where a.Accntnum = b.account_no) as c;
First solve the problem then write the code !
Viewing 10 posts - 1 through 9 (of 9 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy