Connecting Tech Pros Worldwide Help | Site Map

big query question

  #1  
Old April 18th, 2006, 09:35 PM
Fred S
Guest
 
Posts: n/a
Hi,
I am working on a database of time series, where the main table looks
like this
date | id | value
but i have something like several thousands of id's and several
thousands of dates as well
my goal is to obtain
date in the format of a matrix with the rows being the dates and each
column contains the values for a certain ID.
Now obviously I could write a join statement, but i dont think that its
the best way.
I there a way to dynamiccaly create these joins ? maybe using a stored
procedure.

Many Thanks

Fred

  #2  
Old April 19th, 2006, 09:05 PM
onedbguru@firstdbasource.com
Guest
 
Posts: n/a

re: big query question


in google search for oracle pivot table

  #3  
Old April 20th, 2006, 05:05 PM
onedbguru@firstdbasource.com
Guest
 
Posts: n/a

re: big query question


also mysql pivot table :)

  #4  
Old April 20th, 2006, 05:55 PM
onedbguru@firstdbasource.com
Guest
 
Posts: n/a

re: big query question


also mysql pivot table :)

  #5  
Old April 20th, 2006, 07:15 PM
Bill Karwin
Guest
 
Posts: n/a

re: big query question


Fred S wrote:[color=blue]
> Hi,
> I am working on a database of time series, where the main table looks
> like this
> date | id | value
> but i have something like several thousands of id's and several
> thousands of dates as well
> my goal is to obtain
> date in the format of a matrix with the rows being the dates and each
> column contains the values for a certain ID.
> Now obviously I could write a join statement, but i dont think that its
> the best way.
> I there a way to dynamiccaly create these joins ? maybe using a stored
> procedure.[/color]

See the article here:
http://dev.mysql.com/tech-resources/...ard/index.html

So you could make a quey such as this one:

SELECT t.date,
GROUP_CONCAT(IF(t.id = 1, t.value, NULL)) AS `ID 1`,
GROUP_CONCAT(IF(t.id = 2, t.value, NULL)) AS `ID 2`,
GROUP_CONCAT(IF(t.id = 3, t.value, NULL)) AS `ID 3`
FROM mytable AS t
GROUP BY t.date, t.id

Unfortunately, this solution for the crosstab query in MySQL requires
that you hard-code the columns. This is in part because there's no way
to make a SQL query have a dynamic number of columns, or to use a
variable in a column alias.

You can run a query prior to this, to get a list of distinct id values,
and then in your application dynamically construct the query as a
string, then execute it.

You may have to choose a subset of id values, because I don't think you
can have an unlimited number of fields in a select-list. I could only
find a reference that MyISAM tables can have a max number of columns of
3392, but this doesn't mean that the same limit applies to fields in a
query.

Regards,
Bill K.
Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
Query question Darren answers 6 August 20th, 2007 05:35 PM
SQL Query Question - JOIN or not to JOIN Mike Curry answers 3 January 3rd, 2006 03:15 AM
SQL Query Question Sparky answers 4 November 12th, 2005 09:49 AM
Mysql select question phpfrizzle@hotmail.com answers 23 July 17th, 2005 12:58 PM