Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Routere detinute in trecut si in ...

Teii din fața casei

E-Mail in serie prin Excel si Out...

Modul alimentare rulou/jaluzea ex...
 Recuperare fișiere dupa form...

Aplicatii stress test RAM

Asigurare auto hibrid

Asus B550M - PC-ul nu porneste di...
 Tzanca Uraganu - Inconjurat de Fe...

explicatie montaj breadboard

3 Doors Down - Kryptonite

Semnalizati cand virati pe un dru...
 Succesiune - mostenire apartament...

Donez Siofor de 1000mg ( diabet t...

Izolatie intre parter si etaj

Hranirea pasarilor din orase -pro...
 

[PostgreSQL]

- - - - -
  • Please log in to reply
8 replies to this topic

#1
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Am o tabela noua, in care pe o coloana trebuie sa am data. Intregistrarile din acesta tabela ar trebuie sa mearga pana la 3 ani in urma.
(pentru unele inregistrari (chiar si din urma, dar mai ales pentru cele de la data curenta in viitor), pot avea si un comentariu)

Exista vreo modalitate prin care pot evita introducerea manuala a fiecarei zile, pe ultimii 3 ani (~ 1200 inregistrari)? Daca da, cum?
Multumesc.

#2
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
Poți pune orice dată la orice înregistrare făra dată? Caz în care scrii un program care introduce orice dată? Sau trebuie să urmezi un algoritm? Caz în care poți să scrii un program care execută algoritmul respectiv? Sau ai altă situație?

#3
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Intr-o aplicatie de tip calendar, cand se face click pe o data, intr-o pagina noua  se afiseaza niste evenimente (daca exista); evenimente ce vin din baza, dar intr-o alta tabela.
In aceasta pagina noua, mai trebuie un camp, unde pot adauga si text (ca si comentariu).

Aceste comentarii, impreauna cu data, se vor stoca intr-o tabela noua.
Ideea era cum pot sa fac (daca se poate face), ca sa evit introducerea manuala, sa generez sa zicem ca prima inregistrare din baza sa fie 1 ianuarie 2014, si sa se incrementeze pana la data curenta.

Exista unele evenimente trecute, care pot avea si comentarii (informatia exista si scriptic, in niste procese verbale); alte evenimete (trecute sau viitoare) nu (si atunci ma gandeam sa apara in baza cu "-".

Sper ca acum e mai clar ce se doreste. Deci, se poate face asa ceva sau nu, si ma apuc muncitoreste si le introduce manual?

#4
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,570
  • Înscris: 30.07.2003

View Postcolombo2003, on 02 august 2017 - 13:26, said:

Ideea era cum pot sa fac (daca se poate face), ca sa evit introducerea manuala, sa generez sa zicem ca prima inregistrare din baza sa fie 1 ianuarie 2014, si sa se incrementeze pana la data curenta.
Acele inreg. au un nr. de ordine ceva de le poti asocia logic data? Daca da, ai cursorul la dispozitie si "muncitoreste" le parcurgi si pui tot incrementezi data. Sau un update in bloc dar la data tii cont de acel id sau ce ai sa fie increment (chiar daca faci calcule/o diferenta ceva etc).

Edited by neagu_laurentiu, 02 August 2017 - 13:36.


#5
PKRUSER

PKRUSER

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 04.07.2017
Nu am instalat postgres dar poate te ajuta : https://stackoverflo...s-into-database

#6
colombo2003

colombo2003

    Senior Member

  • Grup: Senior Members
  • Posts: 6,312
  • Înscris: 16.07.2008
Evenimentele afisate (pentru data aleasa pe care s-a facut click) vin dintr-o alta tabela (in care am informatii despre descrierea evenimetnului, responsabil, ora etc si un id de eveniment).

Comentariul (de tip text; ca un fel de observatii daca vreti) poate sa fie (conform proces verbal) sa nu (caz in care sa se afiseze "-").
De fapt valoarea default este "-" si daca dau click pe un buton de Edit (pentru o zi aleasa (care poate fi si din trecut)) sa pot introduce textul si la salvare sa se duca in tabela noua (la care ma gandeam) la ziua respectiva (prin update).

Dar, revin, trebuie ca aceasta table noua sa o fac cu date de pe ultimii trei ani in urma (~ 1200 inregistrari). Si sa stau sa le introduc manual, nu e vorba de lene, dar parca...

Cu alte cuvine, daca se poate, as vrea sa mi se faca automat un insert in baza, incepand cu 1 ianuarie 2014 si comentariu afferent "-" (id=1), apoi incrementat (id=2 2 ianuarie 2014 si "-", apoi id=3 3 ianuarie 2014 si "-" si tot asa, pana ajung in prezent.

#7
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,570
  • Înscris: 30.07.2003
Ce nu e clar din comentariul meu de mai sus? Ai datele, ai un criteriu dupa care asociezi data cu pricina, poti folosi cursorul dau update-ul (aici in functie de criteriul tau). Nu se pune problema de manual!

Edited by neagu_laurentiu, 02 August 2017 - 13:51.


#8
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
data o poti obtine cu formula asta : '2014-01-01'::date + (id - 1) * interval '1 day' . ce faci cu ea acum depinde de tine

#9
Qupidqu

Qupidqu

    Member

  • Grup: Members
  • Posts: 298
  • Înscris: 04.08.2017

View Postcolombo2003, on 02 august 2017 - 12:52, said:

Exista vreo modalitate prin care pot evita introducerea manuala a fiecarei zile, pe ultimii 3 ani (~ 1200 inregistrari)? Daca da, cum?
Multumesc.
Da se poate folosind functia  de tip window(window functions)  pe care orice RDBMS care se respecta le  are.
Pentru postgresqk vezi aici:
https://www.postgres...ons-window.html

In cazul tau trebuie sa foloesesti functia LAG  in combinatie cu partition-order-by, astfel :
lag ( <column_name>, 1, default ) over partition ( <column_name> )  order by (<column_name>)
adica  valorea curenta se calculeaza pe baza valori precedente, pe care o incrementezi cu un anumit pas.
Valoare 1 reprezinta cu cate randuri in spate sa te duci fata de valoarea curenta si nu cu cat sa incrementezi. \

Eu asa am facut cand am avut aceiasi problema a ta , insa pe SQL-SERVER pt peste 550 de milioane de inregistrari.

View Postneagu_laurentiu, on 02 august 2017 - 13:50, said:

Ce nu e clar din comentariul meu de mai sus? Ai datele, ai un criteriu dupa care asociezi data cu pricina, poti folosi cursorul dau update-ul (aici in functie de criteriul tau). Nu se pune problema de manual!
Nota bene: pe inregistrari mari niciodata nu folosi programare imperativa(cu cursoare) in medii RDBMS, ci cauti alta solutie  fie pe baza de seturi fie daca nu se poate iti faci un job in java /whatever (care sa ruleze pe un alt server) care preia datele din sursa le prelucreaza si le varsa la destinatie numai prin batch-importing, dar niciodata,absolut niciodata nu folosi cursoare pe milioane de date.

Edited by Qupidqu, 08 September 2017 - 10:10.


Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate