sql >> Database teknologi >  >> RDS >> Mysql

Heltalsbestilling med flere kolonner

Det problem, du synes at have, er, at hver kolonne har en forskellig skala, og du kan derfor ikke nemt kombinere dem. Dette problem kan løses ved hjælp af en teknik kaldet blegning. Dette involverer at beregne gennemsnittet og standardafvigelsen for hver kolonne (du kan gøre dette i 1 SQL-sætning) og derefter skalere hver kolonne til dette, når du vælger:

colSortPos = (colValue-colMean) / colStdev

Hvis du gør dette, får du hver kolonne i området omkring 0, hvilket +/- 1 standardafvigelse inden for området +/- 1. Tricket er så at kombinere disse, så ens datoer er sammen. Problemet her er, at dette ikke er et 2-dimensionelt problem, og du skal derfor tænke multidimensionelt. Så mit forslag er at tage den euklidiske afstand som din sorteringsrækkefølge.

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

Det eneste problem med dette er, at det projicerer dit problem på et 1-dimensionelt rum, der kan få dig til at gå glip af nogle sammenhænge. For at omgå dette foreslår jeg at bruge en klyngeteknik som K-means, som er ret enkel at implementere og er virkelig hurtig. Dette giver dig mulighed for at gruppere dine datoer i k klynger, der viser størst lighed [ http:// en.wikipedia.org/wiki/K-means_clustering ]. Hvis du har de rå data og vil lege med disse (og andre) teknikker, så foreslår jeg, at du prøver weka-værktøjssættet [ http://www.cs.waikato.ac.nz/ml/weka/ ] som vil lade dig lege med disse teknikker.



  1. returner mySQL originale rækkenummer

  2. Opdater SQL-tilstand i MySQL

  3. Brug af udvidede hændelser til at logge forældede funktioner, der bruges i en SQL Server-instans (T-SQL-eksempel)

  4. Sådan trækker du 30 dage fra en dato i T-SQL