Tema: Re: Dar vienas prašymas dėl SQL
Autorius: HyperLink
Data: 2012-01-04 21:01:54
padariau tokį variantą:

select distinct(tbl1.rec_id), pildymo_data from tbl1 left join tbl2 on 
tbl1.rec_id=tbl2.rec_id
where tbl1.ivedimo_data between '2000.01.01' and '2001.01.01' or 
tbl2.koregavimo_data between '2000.01.01' and '2001.01.01'

ivedimo_data, kada buvo padarytas irasas I tbl1
koregavimo_data saugomi visi iraso koregavimai tbl2.
pildymo_data - kada anketa uzpilde respondentas

man reikia sekti, ar pildymo data nera toli nuo realybes :) Na ten kruva 
kontroliniu funkciju daroma.

Operatore turi matyti sarasa visu irasu, kuriuos naujai ivede ir prie kuriu 
prisiliete (dare update, po kiekvieno update atsiranda irasas tbl2 
lenteleje) tam tikru laikotarpiu.

Auksciau pateiktas scriptas veikia normaliai, trumpiau negu 2x50 pasiūlytas, 
bet vistiek nenormaliai. Suindeksuoti datų laukai.
Jeigu uždedi select vien pagal ivedimo_data arba koregavimo_data ziureti 
veiksmas netrunka daugiau 10 sekundžių. Jeigu ieškau kartu pagal 
ivedimo_data ir koregavimo_data, veiksmas uzsitesia apie  4 minutes.


"Laimis"  parašė naujienų news:je1493$oht$1@trimpas.omnitel.net...

HyperLink rašė:
> esmė tokia:
>
> įrašas sukuriamas vieną kartą ir jo sukūrimo data negali keistis (šiuo
> atveju, tai yra labai svarbu duomenų įvedimo kontrolei užtikrinti),
> todėl aš jį išsaugau tbl1 lauke ivedimo_data
> tbl1 lentelėje yra laukas paskutinio_koregavimo_data. Kai įrašas
> koreguojamas update automatiskai iterpia ten db serverio current datą.

Tikiuosi tam naudoji trigerį?

> Paskui
> susirandu tą įrašą, paimu tą paskutinio koregavimo datą ir su atitinkamu
> rec_id įterpiu į tbl2.

Tikiuosi tam naudoji trigerį? Ir tokiu atveju, įterpus naują įrašą,
paskiausio koregavimo data == įvedimo data. Atpuola poreikis
tikrinti/jungti lentelę tbl2.

>
> Jeigu įrašas nekoreguojamas, tbl2 neatsiranda jokios informacijos apie
> tą įrašą. Neeikvoju be reikalo db vietos. :)
> Dėl koregavimo datos. Tai paprasciausias sprendimas tureti tikslia
> redagavimo data. :)

tbl2, kaip suprantu, yra koregavimo datų *sąrašas*. Tai nesuprantu ką iš
tikrųjų turėtų daryti tavo geidžiama užklausa. Nes pateiktame pavyzdyje
kai kurios įrašo koregavimo datos iš lentelės tbl2 išlipa iš apsibrėžto
intervalo; tokiu atveju įrašas neturėtų būti įtraukiamas? Be to,
rezultate norima matyti pildymo datą, kas kertasi su sąlyga ARBA
(įvedimo arba koregavimo data). Ką reiškia pildymo_data, kokia šio lauko
prasmė? Ir kodėl pildymo data gali būti ankstesnė, nei įvedimo?