» »

Pridobitev podatkov in sortiranje

Pridobitev podatkov in sortiranje

Cvele2011 ::

Pozdravljeni,

mi lahko prosim kdo pomaga glede pridobitve podatkov namreč spodnje podatke bi rad sortiral po datumu nato pa bi rad dobil prvo VP2=_01 nato VP2=99

DATUM VP1 VP2
2011-01-01 08:58:08.000 _02 01
2011-01-02 00:00:00.000 _02 01
2011-01-03 00:00:00.000 _02 99
2011-01-03 15:58:56.000 _02 01
2011-01-03 19:01:45.000 _02 99
2011-01-04 00:00:00.000 _01 01
2011-01-04 08:58:32.000 _02 01

Željeni Rezultat:
2011-01-01 08:58:08.000 _02 01
2011-01-03 00:00:00.000 _02 99
2011-01-02 00:00:00.000 _02 01
2011-01-03 19:01:45.000 _02 99
2011-01-03 15:58:56.000 _02 01
2011-01-04 00:00:00.000 _01 01
2011-01-04 08:58:32.000 _02 01

L.p.

energetik ::

Najprej bolj jasno napiši, kako so podatki podani. Koliko je stolpcev? Kakšen je format datuma (yyyy-mm-dd ali kej drugega)? In kaj je VP2?

Cvele2011 ::

Prvi stolpec je datum: 2011-01-04 08:58:32.000 se pravi frmata yyyy-MM-dd HH:mm:ss
Drugi stolpec pa je VP1 fromata INT
in pa Tretji stolpec VP2 prav tako INT

Če je vp2 _01 pol je prijava
če je vp2 99 je odjava
pol pa more biti prva prijava nato prva odjava

L.p.

Spura ::

VP2 ni nikoli _01?

Cvele2011 ::

Vp2 je lahko samo 01 ali pa 99...gori je bla napaka prijava = 01 odjava =99...

_Mare_ ::

Če bi rad samo sortital, je verjetno najbolj simpl z Excelom. For fun, Practical Extraction and Report Language to the rescue (:
#!/usr/bin/env perl
use warnings;
use strict;
use feature 'say';

my $input = <<EOL;
2011-01-04 00:00:00.000 _01 99
2011-01-01 08:58:08.000 _02 01
2011-01-02 00:00:00.000 _02 01
2011-01-03 00:00:00.000 _02 99
2011-01-03 15:58:56.000 _02 01
2011-01-03 19:01:45.000 _02 99
2011-01-04 00:00:00.000 _01 01
2011-01-04 08:58:32.000 _02 01
EOL

sub one_way {
    join "\n", map { "$_->{timestamp} _$_->{VP1} $_->{VP2}" }
      sort { $a->{timestamp} cmp $b->{timestamp} || $a->{VP2} <=> $b->{VP2} }
      map { /^(?<timestamp>.+?) _(?<VP1>\d+) (?<VP2>\d+)/; +{%+} }
      split /\n/, shift;
}

sub or_another {
    join "\n", map { $_->[0] }
      sort { $a->[1] cmp $b->[1] || $a->[2] <=> $b->[2] }
      map { [ $_, /^(.+?) _\d+ (\d+)$/ ] }
      split /\n/, shift;
}

say one_way $input; # I like it better
print "\n";
say or_another $input;

Na srečo imaš timestampe v taki obliki, da se jih da sortirat kot stringe.

Cvele2011 ::

Tega pa glih ne razumem...;)

Namreč jaz to delam vse v sqlexpress-u tak da bi prosil za obrazložitev....:) najboljše pa bi mi bilo če bi si lahko to naredo kot view.

_Mare_ ::

Aa, moj reading comprehension je švoh (spregledal tvoj včerajšnji message o bazi :).
Glede na to, da po navadi INT-i, ki jih dobiš iz baze, niso zero-paddani ali se začnejo z '_', verjetno že te podatke dobiš iz nekega viewa/čudnega querya z kakšno
('_' + RIGHT('00' + CONVERT(nvarchar, VP2), 2)
T-SQL finto, ki pripne ničle. Al si to pridelal pri kopiranju?

V vsakem primeru sortiraš z ORDER BY, ki ga dodaš na konc querya/viewa:
SELECT ....  
FROM Whatever
ORDER BY Datum, VP2

To bo sortiralo najprej po datumu, če je slučajno isti, pa po VP2.

dolenc ::

Če so podani podatki pravilni potem tak sort ne bo dober, če pa si se malo zatipkal, potem pa bo.

V primeru da se nisi zmotil, jaz ne vidim kako bi to samo z sortom rešil, najlažje bi bilo dodat še en atribut, oznaka osebe(če se recimo na kartico štemplajo ali se vpisuje ročno), pa potem še po tem sortiraš.

Željeni Rezultat:
2011-01-01 08:58:08.000 _02 01
2011-01-03 00:00:00.000 _02 99
2011-01-02 00:00:00.000 _02 01
2011-01-03 19:01:45.000 _02 99
2011-01-03 15:58:56.000 _02 01
2011-01-04 00:00:00.000 _01 01
2011-01-04 08:58:32.000 _02 01

Spura ::

ja, kva je s temi vnosi ki imajo uro 0000000000


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Digitalna regulacija tokovnega vira

Oddelek: Elektrotehnika in elektronika
142343 (1917) Red_Mamba
»

Kdor je ukradel sedem milisekund, je zaslužil milijone

Oddelek: Novice / Znanost in tehnologija
4121293 (9011) TESKAn
»

GPS kordinate

Oddelek: Loža
162048 (1759) steklo
»

[SQL] PgAdmin preprosto vprasanje povezano s stolpci v tabeli

Oddelek: Programiranje
221898 (1257) Cvele2011
»

Desetletja, stletja, tisocletja...oz. kdaj je zacela 1. dekada (strani: 1 2 3 4 )

Oddelek: Loža
18138628 (36276) egonk

Več podobnih tem