Najwyzsza wartosc dla danych z pliku

0

Witam

Musze napisać querrt/procedure/funkcje i nie wiem czy sql będzie najlepszym wyjściem ale spróbuję

Mamy dane w pliku csv (duzo danych) i parametry które chce ustawić tak aby wartość liczona z tych parametrów była maksymalna
W pliku DANE mam wycinek danych kilka rekordów. Rekordy maja być brane pod uwagę jak przejdą przez filtr 10 parametrów np ustanawiamy tak żeby kolumna 3 (parametr 3) była na TAK a kolumna 2 była >2.0. I chce dobrać tak te parametry aby wynik czyli kolumna 11 była jak największa przy jednoczesnym pewnym ograniczeniu przez parametry.

W skrócie sql ma przetestowac np taka konfiguracje
k1>1
k2>2
k3= TAK
k4 = NIE
k5 max7%
k6 5 betweend 7
k7>5
k8>19
k9>10
k10<100

podac wynik i wziasc nawstepna partie parametrow przy czy w niektorych skok bedzie co 1 ( k1,k2,k6,k7,k8,k9,k10 a k5 o 0.1 ) przy uwzglednieniu np ze k2 musi byc zawsze wieksze od 2 a k7 wieksze od 5 itd

Jakie jest polecnie aby pobieral dane z pliku i liczyl wystarczy pobrac dane do tymczasowej tabeli i tam je przeliczac czy innym sposobem ?

0

Napisz to proszę jeszcze raz, ale tak, żeby dało się zrozumieć o co Ci chodzi, bo na razie to jest jakiś bełkot.

A po drugie - jeśli oczekujesz pomocy, to wykaż trochę inicjatywy, a nie jedynie wrzucenie wymagań. A jeśli chcesz, żeby ktoś to zrobił za Ciebie to zamieść w "ogłoszeniach drobnych".

0

Ogólnie to da się.
Jak duży jest ten csv?
Jak często się zmienia?
W jaki sposób jest dostarczany filtr do sprawdzenia warunków?

0

W zadnym wypadku nie chce aby ktoś napisał za mnie to querry raczej dal podpowiedz.

PLIK CSV ma kilkaset tysieci rekordów.
Założenia zmieniają sie raz w roku.
Gdy obliczymy najbardziej korzystne wartości parametrów K1 k2 k3 k4 itd zostają stale na rok ( a baza rekordów caly czas rośnie)

Moj pomysł byl taki zrobić to case i tymczasowa tabelka.
Ma ktoś jakiś inny pomysł lub jest w stanie mnie naprowadzić jakoś?

1

Ja nie bardzo rozumiem...

Załóżmy że sprawdziłem wynik dla pierwszych parametrów:

k1>1
k2>2
k3= TAK
k4 = NIE
k5 max7%
k6 5 betweend 7
k7>5
k8>19
k9>10
k10<100

mam wynik z k11

Zwiekszam parametry i szukam najwieszej k11

ile razy zwiekszam parametry?

Gdzie te wyniki maja sie zapisywać?

1

Najlepiej to podeślij kawałek takiego pliku. Nie wiem, czy jest sens ładować to do bazy (chyba że potrzebujesz tego do jeszce czegoś innego). To jest jakaś jednorazowa akcja czy jakiś proces, który będziesz odpalał raz na jakiś czas. Możesz popatrzeć na Apache drill (https://drill.apache.org/docs/text-files-csv-tsv-psv/) albo nawet zrobić to w jakimś Pythonie. Potrzebny jest szerszy kontekst problemu.

0

Sa zalozenie stale.Wprowadzmy dla uproszeczenia

K1 większe od 1 mniejsze od 3
k2 musi byc zawsze wieksze od 2.0  mniejsze od 3.0
K3 dowolne
K4 zawsze musi byc na TAK
K5 dowolne
K6 wieksze od 4 mniejsze od 10
k7 wieksze od 5 mniejsze od 11
k8 dowolne
k9 dowolne
K10 wieksze od 1 mniejsze od 7

Teraz moze nie miec to dla was wiekszego sensu ale dla uproszczenia ( kolumna k11 jest wynikiem ale ona tez ma zalozenia bardziej skomplikowane)
Musze policzyc dla jakich parametrow suma k11 spelniajaca zalozenia stale bedzie najwieksza

Czyli przykladowo przyjmujemy warunki minimalne dla K i zapisujemy wynik
Nastepnie beziemy waruki minimalne i powiedzmy k1 zwiekszamy o 1 i zapisujemy wynik
i gdy przesledzimy wszystkie mozliwosci dla kombinacji K podajemy ma wynik

Ponizej czesc danych

K1	K2	K3	K4	K5	K6	K7	K8	K9	K10	K11
1	2.4	TAK	NIE	10%	7	8	33	22	1	1000
1	2.3	NIE	TAK	9%	6	7	3	11	2	1200
2	2.1	TAK	TAK	9%	9	9	9	9	8	1150
1	2.0	TAK	NIE	8%	4	8	8	8	8	1300
2	1.9	NIE	TAK	7%	8	83	3	4	3	1400

Dzieki za poswiecony czas

0

SQL nie nadaje się do przetwarzania sekwencyjnego, a mam wrażenie, że o takie tu się rozchodzi. Ja by to próbował wczytać do jakiegoś Pythona i tam to analizował.

0

Nadal nie do końca czaje co chcesz zrobić, da się to osiągnąć w SQL jednak nie mam pewności czy to najlepsza droga. Odłóżmy na razie dywagacje na temat tego jak najlepiej. Jeżeli chodzi o MS SQL to ja bym poszedl tą drogą:

1.Pobranie danych z CSV:
#1 odpytywanie bezpośrednio CSV:
Wukorzystanie schema.ini i użycie openrowset do odpytywania CSV

#2 import csv do tabeli tymczasowej
to może być najlepsza opcja, bo daje mozliwośc przygotowania danych, jeżeli masz w zalozeniach:
k2 musi byc zawsze wieksze od 2.0 mniejsze od 3.0
K4 zawsze musi byc na TAK
to w tabeli usuwasz takie rekordy i nie musisz już używac tego warunku, a danych będzie zawsze mniej

2.warunki do poszukiwania wyników, tu trochę płynę bo nie do końca rozumiem Twój opis. (Upraszczam go do trzech kolumn.)
Stworzyłbym tabelę warunków:
K1 większe od 1 mniejsze od 3
k2 musi byc zawsze wieksze od 2.0 mniejsze od 3.0
K4 zawsze musi byc na TAK

więc tabela wygladałaby tak (nie wiem czy dobrze rozumiem te zwiększenia):

+------+------+------+------+-----+
| k1od | k1do | k2od | k2do | k4  |
+------+------+------+------+-----+
|    1 |    3 |  2.0 |  3.0 | TAK |
|    2 |    4 |  2.0 |  3.0 | TAK |
|    3 |    5 |  2.0 |  3.0 | TAK |
+------+------+------+------+-----+

3.wyliczenie K11

SELECT 
       w.k1od,
       w.k1do,
       w.k2od,
       w.k2do,
       w.k4,
       Sum(d.k11)
FROM
    dane d
    INNER JOIN warunki w ON d.k1 BETWEEN w.k1od AND w.k1do
                            AND d.k2 BETWEEN w.k2od AND w.k2do
                            AND d.k4=w.k4
GROUP BY 
         w.k1od,
         w.k1do,
         w.k2od,
         w.k2do,
         w.k4
0

Przeniose watek do pythona i tam postaram sie to dokladniej opisac bo widze nie za dobrze przekazałem problem. Jezeli jednak wg was da sie to napisac w sql to bylbym wdzieczny za nakierowanie jak

Najwyzsza wartosc dla danych z pliku

Dzieki za poswiecony czas.

1 użytkowników online, w tym zalogowanych: 0, gości: 1