Il problema che sembra che tu abbia è che ogni colonna ha una scala diversa e quindi non puoi combinarle facilmente. Questo problema può essere risolto utilizzando una tecnica chiamata sbiancamento. Ciò comporta il calcolo della deviazione media e standard di ciascuna colonna (puoi farlo in 1 istruzione SQL) e quindi il ridimensionamento di ciascuna colonna a questo quando si seleziona:
colSortPos = (colValue-colMean) / colStdev
In questo modo otterrai ogni colonna compresa tra 0 e +/- 1 deviazione standard all'interno dell'intervallo +/- 1. Il trucco quindi è combinarli in modo che date simili siano insieme. Il problema qui è che questo non è un problema bidimensionale e quindi è necessario pensare in modo multidimensionale. Quindi il mio suggerimento è di prendere la distanza euclidea come ordinamento.
SELECT
date,
i,
j,
k,
SQRT( POW(([email protected])/@iStdDEv, 2) + POW(([email protected])/@jStdDEv, 2) + POW(([email protected])/@kStdDEv, 2) )
AS
sort_order
FROM
table
ORDER BY
sort_order
L'unico problema con questo è che proietta il tuo problema su uno spazio unidimensionale che potrebbe farti perdere alcune correlazioni. Per aggirare questo problema, suggerisco di utilizzare una tecnica di clustering come K-means che è piuttosto semplice da implementare ed è davvero veloce. Ciò ti consentirà di raggruppare le tue date in k cluster che mostrano la maggiore somiglianza [ http:// en.wikipedia.org/wiki/K-means_clustering ]. Se hai i dati grezzi e vuoi giocare con queste (e altre) tecniche, ti suggerisco di provare il toolkit weka [ http://www.cs.waikato.ac.nz/ml/weka/ ] che ti permetterà di giocare con queste tecniche.