Home All Groups Group Topic Archive Search About

CAN'T SOLVE SELECT GROUPING WITH MAX FUNCTION

Author
30 Dec 2005 10:10 PM
rlueneberg
Here is the scenario

ACCOUNT       CONTACT           DATE
account A    CILXFA000HJ6    4/6/2005 16:05
account A    C15467XXXXXX    7/27/2005 12:22
account B    C20002XXXXXX    2/15/2005 18:25
account B    C12225XXXXXX    12/14/2005 20:10

The RESULT  should be this;

account A    C15467XXXXXX    7/27/2005 12:22
account B    C12225XXXXXX    12/14/2005 20:10

I tried using MAX function to get the LAST modified date display one
single record with account, contact and LAST modified date or last date
fields but the problem is that I can't use it to select out the right
contact because it is not designed to pick the last record? What are
other possible  simple solutions. PS. The listing is already sorted by
date.


Rod

Author
30 Dec 2005 10:23 PM
Trey Walpole
select account, contact, date
from yourtable t1
where date = (select max(date)
   from yourtable
   where account=t1.account
  )

rlueneb***@gmail.com wrote:
Show quote
> Here is the scenario
>
> ACCOUNT       CONTACT           DATE
> account A    CILXFA000HJ6    4/6/2005 16:05
> account A    C15467XXXXXX    7/27/2005 12:22
> account B    C20002XXXXXX    2/15/2005 18:25
> account B    C12225XXXXXX    12/14/2005 20:10
>
> The RESULT  should be this;
>
> account A    C15467XXXXXX    7/27/2005 12:22
> account B    C12225XXXXXX    12/14/2005 20:10
>
> I tried using MAX function to get the LAST modified date display one
> single record with account, contact and LAST modified date or last date
> fields but the problem is that I can't use it to select out the right
> contact because it is not designed to pick the last record? What are
> other possible  simple solutions. PS. The listing is already sorted by
> date.
>
>
> Rod
>
Author
3 Jan 2006 4:03 PM
rlueneberg
That was exactly what I was looking. It took a quite some time to run
though, but it does the job precisely. I will test the other
suggestions and see how it goes.

Thank you

Rod
Author
3 Jan 2006 8:43 PM
rlueneberg
Using the suggested script I found that there are some contacts with
exact same create date and time, including seconds. This is because
they were eletronically imported. This leads to another scenario. I
need to assign at least one contact as a primary contact. In this case,
how can I pick the first one or the last one? If this is not possible,
then how can I randomly pick just one record of each grouped result. PS
There is no autoincrement or sequential column.

For example:

account C       CILXFA000HJ6    4/6/2005 16:05
account C       CILXFA000333    4/6/2005 16:05
account D       C20002XXXXXX    2/15/2005 18:25
account D       C50902XXXXXX    2/15/2005 18:25
account D       C50008XXXXXX    2/15/2005 18:25

Thanks

Rod
Author
30 Dec 2005 10:41 PM
Mark Williams
Alternatively:

select t1.account, t1.contact, t2.maxdate from yourtable t1
INNER JOIN
(select account, MAX(date) as "maxdate" from yourtable group by account) t2
ON t1.account=t2.account


--



Show quote
"rlueneb***@gmail.com" wrote:

> Here is the scenario
>
> ACCOUNT       CONTACT           DATE
> account A    CILXFA000HJ6    4/6/2005 16:05
> account A    C15467XXXXXX    7/27/2005 12:22
> account B    C20002XXXXXX    2/15/2005 18:25
> account B    C12225XXXXXX    12/14/2005 20:10
>
> The RESULT  should be this;
>
> account A    C15467XXXXXX    7/27/2005 12:22
> account B    C12225XXXXXX    12/14/2005 20:10
>
> I tried using MAX function to get the LAST modified date display one
> single record with account, contact and LAST modified date or last date
> fields but the problem is that I can't use it to select out the right
> contact because it is not designed to pick the last record? What are
> other possible  simple solutions. PS. The listing is already sorted by
> date.
>
>
> Rod
>
>
Author
30 Dec 2005 11:57 PM
Mark Williams
Oops. This work better:

select t1.account, t1.contact, t2.maxdate from yourtable t1
INNER JOIN
(select account, MAX(date) as "maxdate" from yourtable group by account) t2
ON t1.date=t2.maxdate


Show quote
"Mark Williams" wrote:

> Alternatively:
>
> select t1.account, t1.contact, t2.maxdate from yourtable t1
> INNER JOIN
> (select account, MAX(date) as "maxdate" from yourtable group by account) t2
> ON t1.account=t2.account
>
>
> --
>
>
>
> "rlueneb***@gmail.com" wrote:
>
> > Here is the scenario
> >
> > ACCOUNT       CONTACT           DATE
> > account A    CILXFA000HJ6    4/6/2005 16:05
> > account A    C15467XXXXXX    7/27/2005 12:22
> > account B    C20002XXXXXX    2/15/2005 18:25
> > account B    C12225XXXXXX    12/14/2005 20:10
> >
> > The RESULT  should be this;
> >
> > account A    C15467XXXXXX    7/27/2005 12:22
> > account B    C12225XXXXXX    12/14/2005 20:10
> >
> > I tried using MAX function to get the LAST modified date display one
> > single record with account, contact and LAST modified date or last date
> > fields but the problem is that I can't use it to select out the right
> > contact because it is not designed to pick the last record? What are
> > other possible  simple solutions. PS. The listing is already sorted by
> > date.
> >
> >
> > Rod
> >
> >
Author
31 Dec 2005 5:52 PM
Joe from WI
Mark, you need to specify both columns in your join clause:

select t1.account, t1.contact, t2.maxdate from yourtable t1
INNER JOIN
(select account, MAX(date) as "maxdate" from yourtable group by account) t2
ON t1.account = t2.account and t1.date=t2.maxdate

Joe

Show quote
"Mark Williams" wrote:

> Oops. This work better:
>
> select t1.account, t1.contact, t2.maxdate from yourtable t1
> INNER JOIN
> (select account, MAX(date) as "maxdate" from yourtable group by account) t2
> ON t1.date=t2.maxdate
>
>
> "Mark Williams" wrote:
>
> > Alternatively:
> >
> > select t1.account, t1.contact, t2.maxdate from yourtable t1
> > INNER JOIN
> > (select account, MAX(date) as "maxdate" from yourtable group by account) t2
> > ON t1.account=t2.account
> >
> >
> > --
> >
> >
> >
> > "rlueneb***@gmail.com" wrote:
> >
> > > Here is the scenario
> > >
> > > ACCOUNT       CONTACT           DATE
> > > account A    CILXFA000HJ6    4/6/2005 16:05
> > > account A    C15467XXXXXX    7/27/2005 12:22
> > > account B    C20002XXXXXX    2/15/2005 18:25
> > > account B    C12225XXXXXX    12/14/2005 20:10
> > >
> > > The RESULT  should be this;
> > >
> > > account A    C15467XXXXXX    7/27/2005 12:22
> > > account B    C12225XXXXXX    12/14/2005 20:10
> > >
> > > I tried using MAX function to get the LAST modified date display one
> > > single record with account, contact and LAST modified date or last date
> > > fields but the problem is that I can't use it to select out the right
> > > contact because it is not designed to pick the last record? What are
> > > other possible  simple solutions. PS. The listing is already sorted by
> > > date.
> > >
> > >
> > > Rod
> > >
> > >
Author
2 Jan 2006 12:52 AM
Mark Williams
Thanks Joe. I thought about it for a few minutes, and realized that if two
accounts had the same max date value, my query would produce the wrong
results.

--



Show quote
"Joe from WI" wrote:

> Mark, you need to specify both columns in your join clause:
>
> select t1.account, t1.contact, t2.maxdate from yourtable t1
> INNER JOIN
> (select account, MAX(date) as "maxdate" from yourtable group by account) t2
> ON t1.account = t2.account and t1.date=t2.maxdate
>
> Joe
>
> "Mark Williams" wrote:
>
> > Oops. This work better:
> >
> > select t1.account, t1.contact, t2.maxdate from yourtable t1
> > INNER JOIN
> > (select account, MAX(date) as "maxdate" from yourtable group by account) t2
> > ON t1.date=t2.maxdate
> >
> >
> > "Mark Williams" wrote:
> >
> > > Alternatively:
> > >
> > > select t1.account, t1.contact, t2.maxdate from yourtable t1
> > > INNER JOIN
> > > (select account, MAX(date) as "maxdate" from yourtable group by account) t2
> > > ON t1.account=t2.account
> > >
> > >
> > > --
> > >
> > >
> > >
> > > "rlueneb***@gmail.com" wrote:
> > >
> > > > Here is the scenario
> > > >
> > > > ACCOUNT       CONTACT           DATE
> > > > account A    CILXFA000HJ6    4/6/2005 16:05
> > > > account A    C15467XXXXXX    7/27/2005 12:22
> > > > account B    C20002XXXXXX    2/15/2005 18:25
> > > > account B    C12225XXXXXX    12/14/2005 20:10
> > > >
> > > > The RESULT  should be this;
> > > >
> > > > account A    C15467XXXXXX    7/27/2005 12:22
> > > > account B    C12225XXXXXX    12/14/2005 20:10
> > > >
> > > > I tried using MAX function to get the LAST modified date display one
> > > > single record with account, contact and LAST modified date or last date
> > > > fields but the problem is that I can't use it to select out the right
> > > > contact because it is not designed to pick the last record? What are
> > > > other possible  simple solutions. PS. The listing is already sorted by
> > > > date.
> > > >
> > > >
> > > > Rod
> > > >
> > > >

AddThis Social Bookmark Button