|
That did it! Thanks a million!!!
Denise Duggan
|
|
|
|
|
I have as table like
TheDate
Type
Value
I need to retreive the last value for each type.
I try a SQL command like
SELECT MAX(TheDate), Type, Value from MyTable GROUP BY Type
But I receive an error :
Erreur SQL : ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
Do you have any idea ?
|
|
|
|
|
I would try
SELECT MAX(TheDate), Type, Value
FROM MyTable
GROUP BY Type, Value
Lobster Thermidor aux crevettes with a Mornay sauce, served in a Provençale manner with shallots and aubergines, garnished with truffle pate, brandy and a fried egg on top and Spam - Monty Python Spam Sketch
|
|
|
|
|
Thanks for the idea, but it's not enought because the values are diffrent.
I receive in this case :
MAX(TheDate), Type, Value
2011/08/11 , T1 , 10
2011/08/17 , T1 , 12
2011/09/25 , T1 , 11
2011/08/15 , T2 , 10
...
And I only need the last value for T1, T2, ... !
Mike
modified 26-Oct-11 8:09am.
|
|
|
|
|
Then you need to remove the Value column from the query.
SELECT MAX(TheDate), Type
FROM MyTable
GROUP BY TYPE
But then you don't get the value.
So join the result from this query with the original table.
WITH maxdate AS (
SELECT MAX(TheDate) TheDate, Type
FROM MyTable
GROUP BY Type
)
SELECT t.TheDate, t.Type, t.Value
FROM MyTable t join maxdate d
ON t.TheDate = d.TheDate
AND t.Type = d.Type
|
|
|
|
|
Super,
It's working
Thanks
|
|
|
|
|
If you get performance issues on this query you will need a composite index on (Type,TheDate)
|
|
|
|
|
Heres a query using Rank as suggested by Mycroft
SELECT TheDate, TYPE, Value
FROM (
SELECT TheDate, Type, Value, Rank( ) OVER (PARTITION BY Type ORDER BY TheDate DESC NULLS LAST) RN
FROM MyTable
)
WHERE RN = 1
Just a bit curious whether performance is better.
|
|
|
|
|
Try this query
select distinct
(select top 1 t2.thedate from MyTable as t2 where t2.[type]=t1.[type] order by t2.thedate desc) as thedate
, t1.[type]
,(select top 1 t2.value from MyTable as t2 where t2.[type]=t1.[type] order by t2.thedate desc) as [Value]
from MyTable as t1
order by t1.[type]
I Love T-SQL
"VB.NET is developed with C#.NET"
If my post helps you kindly save my time by voting my post.
modified 26-Oct-11 13:11pm.
|
|
|
|
|
You first need to find the MAX(TheDate) and then use that to find the Value(s).
select Value
,Type
from TABLE
where TheDate in ( select MAX(TheDate)
from Table
group by Type
)
;
That's off the top of my head, but should be close.
Chris Meech
I am Canadian. [heard in a local bar]
In theory there is no difference between theory and practice. In practice there is. [Yogi Berra]
posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]
|
|
|
|
|
OK, but you select the max date and not the max date per type
I have several types and I shearch the last value for each type
and not the max date per type
modified 26-Oct-11 10:39am.
|
|
|
|
|
MikeDhaan wrote: and not the max date per type
The inner select has a group by type which should produce a list of MAX(dates).
Chris Meech
I am Canadian. [heard in a local bar]
In theory there is no difference between theory and practice. In practice there is. [Yogi Berra]
posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]
|
|
|
|
|
Correct but the result with the extract below is not correct.
MAX(TheDate), Type, Value
2011/08/11 , T1 , 10
2011/08/17 , T1 , 12
2011/09/25 , T1 , 11
2011/08/11 , T2 , 15
2011/10/10 , T3 , 15
...
The result is :
MAX(TheDate), Type, Value
2011/08/11 , T1 , 10
2011/09/25 , T1 , 11
2011/08/11 , T2 , 15
2011/08/15 , T2 , 10
...
Because
select MAX(TheDate) from Table group by Type
return
2011/09/25 (for T1)
2011/08/11 (for T2)
2011/10/10 (for T3)
|
|
|
|
|
Do a little research on Row_Number, Partition and Ranking. Using these you can set up an inner query that ranks the records by date partitioned over type.
The outer query would then join by date and type where the rank = 1.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Since there are multiple values the same in TheDate column it can not be used as a key and that is why you are getting those results. Another, more complicated way, is to use the date and type as a key. Try this
select date
,type
,value
from table t
, ( select max(date) max_date
,type type
from Table
group by type
) tg
where t.date = tg.max_date
and t.type = tg.type
order by type
;
Chris Meech
I am Canadian. [heard in a local bar]
In theory there is no difference between theory and practice. In practice there is. [Yogi Berra]
posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]
|
|
|
|
|
Super,
It's now in order !
Thanks
|
|
|
|
|
I'm always reluctant to push the partition/rank solution as someone always seems to come up with a simpler answer.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
A partition/rank solution wouldn't need the join and therefore probably performs better.
The simplest answer isn't always the best.
|
|
|
|
|
SELECT MAX(TheDate), Type, Value FROM MyTable GROUP BY Type, Value
|
|
|
|
|
Hi,
I had mysql installed on my laptop (Windows Vista) but my operating system got corrupted and i had to remove the hard disk and use it as external hard disk.
so currently i have access to the laptop when i connect as external hard disk and the I can go to the Program Files\Mysql folder just like any folder in my external hard.
Now I want to know how can I restore-re-create the database on my new machine using the files of the mysql available on my external hard disk (which use to be my laptop hard disk)?
Thanks,
Jassim
|
|
|
|
|
Change my.ini to point to the correct datadir and restart MySql.
Where's your backup?
Precisely, and that's why you need one. Store it on a USB-key and keep it under your pillow when you go to sleep
Bastard Programmer from Hell
|
|
|
|
|
I know! it's a big mistake not to take a backup huhuhu
listen....
I tried but mysql services was failing to start..
datadir="F:/ProgramData/MySQL/MySQL Server 5.5/Data/"
then I tried putting it in a folder within the new machine with no2 like this:
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data2/"
and still the same problem..
then I tried to copy the folders for the dbxxx (my database) in the C:/ProgramData/MySQL/MySQL Server 5.5/Data and I got it in the list but i am getting:
1146 Table dosen't exist for every table when i try to open it..
what should I do now?
|
|
|
|
|
this is the error when I tried to start mysql services in the first scenario..
The MySQL service terminated unexpectedly.
|
|
|
|
|
Sounds like the database-file is corrupt. Did it die during a write?
jrahma wrote: what should I do now?
Google for "repair corrupt MySQL" and try everything you find.
Bastard Programmer from Hell
|
|
|
|
|
no it dies during laptop booting only even before windows starts its booting
|
|
|
|