473,320 Members | 2,054 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

SQL Help Needed

MAB
I have a table

Create Table Payments {
paymentid int,
customerid int,
amount int,
date datetime
}

What I want is the sum of the amounts of the last payments of all customers.
Now the last payment of a customer is not necessarily the one with the
highest paymentid for that customer BUT it is the one with the highest
paymentid on the MOST RECENT date. We dont keep the time part just the date
so if there are more than 1 payments of a customer on a date ( and there are
many such cases ) only then the paymentid decides which is the last payment.
Further the last payment may be the last as of today but I may want to find
the sum of all the last payments upto say March 1, 2003
or any date. My own solution is too slow even it is correct.
SELECT SUM( AMOUNT )
FROM PAYMENTS AS P1
WHERE PAYMENTID =
( SELECT MAX( PAYMENTID ) FROM PAYMENTS AS P2 WHERE P1.CUSTOMERID =
P2.CUSTOMERID AND DATE =
( SELECT MAX(DATE) FROM PAYMENS AS P3 WHERE P3.CUSTOMERID = P2.CUSTOMERID
AND DATE < #9/8/03# ))

What would be the most efficient solution to this.

Both in SQL Server and in Access 2000

thx in advance



Jul 20 '05 #1
3 1987
mab
Unfortunate I cannot test it

---Make view and the join the view with SELECT statement
CREATE VIEW MY_VIEW
AS
SELECT CUSTOMERID,AMOUNT AS AMOUNT
FROM PAYMENTS
INNER JOIN
(
SELECT CUSTOMERID,AMOUNT ,MAX(DATE) AS DATE FROM PAYMENTS
GROUP BY AMOUNT,CUSTOMERID
) P1
ON P1.CUSTOMERID=PAYMENTS.CUSTOMERID
---------------------------
SELECT SUM(AMOUNT) FROM MY_VIEW

"MAB" <fk*****************@yahoo.com> wrote in message
news:bj************@ID-31123.news.uni-berlin.de...
I have a table

Create Table Payments {
paymentid int,
customerid int,
amount int,
date datetime
}

What I want is the sum of the amounts of the last payments of all customers. Now the last payment of a customer is not necessarily the one with the
highest paymentid for that customer BUT it is the one with the highest
paymentid on the MOST RECENT date. We dont keep the time part just the date so if there are more than 1 payments of a customer on a date ( and there are many such cases ) only then the paymentid decides which is the last payment. Further the last payment may be the last as of today but I may want to find the sum of all the last payments upto say March 1, 2003
or any date. My own solution is too slow even it is correct.
SELECT SUM( AMOUNT )
FROM PAYMENTS AS P1
WHERE PAYMENTID =
( SELECT MAX( PAYMENTID ) FROM PAYMENTS AS P2 WHERE P1.CUSTOMERID =
P2.CUSTOMERID AND DATE =
( SELECT MAX(DATE) FROM PAYMENS AS P3 WHERE P3.CUSTOMERID = P2.CUSTOMERID AND DATE < #9/8/03# ))

What would be the most efficient solution to this.

Both in SQL Server and in Access 2000

thx in advance



Jul 20 '05 #2
MAB (fk*****************@yahoo.com) writes:
What I want is the sum of the amounts of the last payments of all
customers. Now the last payment of a customer is not necessarily the one
with the highest paymentid for that customer BUT it is the one with the
highest paymentid on the MOST RECENT date. We dont keep the time part
just the date so if there are more than 1 payments of a customer on a
date ( and there are many such cases ) only then the paymentid decides
which is the last payment. Further the last payment may be the last as
of today but I may want to find the sum of all the last payments upto
say March 1, 2003 or any date. My own solution is too slow even it is
correct.


This solution is not tested, as you did not provide any sample data:

SELECT SUM(p3.amount)
FROM Payments p3
JOIN (SELECT paymentid = MAX(p2.paymentid)
FROM Payments p2
JOIN (SELECT p1.customerid, mostrecent = MAX(p1.date)
FROM Payments p1
WHERE p1.date <= '20030301'
GROUP BY p1.customerid) AS p1
ON p1.customerid = p2.customerid
AND p1.mostrecent = p2.date) AS p2
ON p3.paymentid = p2.paymentid

This solution is for SQL Server only. I don't know Access, so I can't
help with that.

As for performance, this is likely to be a case of finding the best
indexes. Clustered on (date, customerid) and nonclustered in (paymentid)
maybe.
--
Erland Sommarskog, SQL Server MVP, so****@algonet.se

Books Online for SQL Server SP3 at
http://www.microsoft.com/sql/techinf...2000/books.asp
Jul 20 '05 #3
"MAB" <fk*****************@yahoo.com> wrote in message
news:bj************@ID-31123.news.uni-berlin.de...
I have a table

Create Table Payments {
paymentid int,
customerid int,
amount int,
date datetime
}

What I want is the sum of the amounts of the last payments of all customers.
Now the last payment of a customer is not necessarily the one with the
highest paymentid for that customer BUT it is the one with the highest
paymentid on the MOST RECENT date. We dont keep the time part just the date
so if there are more than 1 payments of a customer on a date ( and there are
many such cases ) only then the paymentid decides which is the last payment.
Further the last payment may be the last as of today but I may want to find
the sum of all the last payments upto say March 1, 2003
or any date. My own solution is too slow even it is correct.
SELECT SUM( AMOUNT )
FROM PAYMENTS AS P1
WHERE PAYMENTID =
( SELECT MAX( PAYMENTID ) FROM PAYMENTS AS P2 WHERE P1.CUSTOMERID =
P2.CUSTOMERID AND DATE =
( SELECT MAX(DATE) FROM PAYMENS AS P3 WHERE P3.CUSTOMERID = P2.CUSTOMERID
AND DATE < #9/8/03# ))

What would be the most efficient solution to this.

Both in SQL Server and in Access 2000

thx in advance


With SQL Server 2000, one can use a UDF.

CREATE VIEW Now (date_time)
AS
SELECT CURRENT_TIMESTAMP

CREATE FUNCTION LatestPaymentsAllCustomers
(@d DATETIME = NULL)
RETURNS TABLE
AS
RETURN(
SELECT SUM(P2.amount) AS total
FROM (SELECT customerid, MAX(date) AS latest
FROM Payments
WHERE date <= COALESCE(@d, (SELECT date_time FROM Now))
GROUP BY customerid) AS P1
INNER JOIN
Payments AS P2
ON P1.customerid = P2.customerid AND
P1.latest = P2.date AND
NOT EXISTS (SELECT * FROM Payments
WHERE customerid = P1.customerid AND
date = P1.latest AND
paymentid > P2.paymentid)
)

-- For latest payments as of now
SELECT total
FROM LatestPaymentsAllCustomers(DEFAULT)

-- For latest payments as of a particular date, e.g., 20030301
SELECT total
FROM LatestPaymentsAllCustomers('20030301')

Regards,
jag
Jul 20 '05 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: System | last post by:
Hello All, Redhat 9.0 Mysql 3.23.56 ==> Running I want to upgarde to 4.0.13 but this is the error it says: # rpm -Uvh MySQL-server-4.0.13-0.i386.rpm warning: MySQL-server-4.0.13-0.i386.rpm: V3...
8
by: Stephen | last post by:
I am trying to add some code to below to include a datatable and fill the datatable. The reason for doing this is so as I can check to see whether there are any rows returned by the stored...
13
by: Joe Feldman | last post by:
This position is located in the South Bay Area in Northern California. If you are interested please send me your resume in a word .doc so that I can review it. If this does not look like a match,...
0
by: Cindy B | last post by:
Please send your resume and position to Cindy@AtlanticResource.com! I CAN NOT accept candidates that ARE OUTSIDE OF THE US! NO PHONE CALLS PLEASE! Email your resume to me! Position:SQL...
3
by: Wade | last post by:
I would like to install the .Net 1.1 framework on a Web Server running W2K to be able to run ASP.NET files, but I'm not sure where to find the files I need for the .Net framework. I have ".NET...
17
by: dingoatemydonut | last post by:
The C99 standard states: "In the abstract machine, all expressions are evaluated as specified by the semantics. An actual implementation need not evaluate part of an expression if it can deduce...
5
by: Steve | last post by:
Hi, I am sitting down to design our next set of internal apps. I would like to approach this in a way that would allow me to break logical parts of the application that handle specific tasks...
0
by: ultradiv | last post by:
I have a VB.NET application partly built that produces an xml output (just a file at present) I have a .NET webserver and SQLserver 2000 I need to be able to send the xml to the webserver/database...
28
by: Ian Davies | last post by:
Hello I would appreciate some help from someone who has knowledge of working with css, php javascript and how they interact. Ive been working on a task for the last few days and have started to...
37
by: C_guy | last post by:
Does anyone know of a (hopefully free) tool that can traverse a project and determine which "#include"s are not needed or needed in every .C file? This would be helpful in removing header...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.