Adatbázis: SQL, XML DB

Rákövetkezők minimuma

Üdv mindenkinek!

A hiányos sql ismereteim miatt hozzátok fordulok segítségért.

A problémám a következő:

Adott két tábla,

checkin ( id , date, time )
checkout ( id , date, time )

amelyek több folyamat kezdetét (checkin) és végét (checkout) tartalmazzák.
Egy folyamat többször is szerepel a táblákban különböző dátum/időpontokkal.

Szeretnék egy olyan sql lekérdezés írni ami
megmondja, hogy egy-egy folyamat mennyi ideig tartott.A problémám ott kezdődik hogy nem tudom megtalálni egy kezdő időpont befejező
időpont párját.

Talán a legegyszerűbb az volna ha valahogy sikerülne
az azonos id-vel rendelkező kezdő időpont rákövetkezőinek
(tőle későbbi dátumok/időpontok) a minimumát venni...
úgy hogy az így talált minimum előtt nincs újabb kezdő időpont ugyanazzal
az id-vel. (mert különben az a minimum annak a másik kezdetenek a párja lenne)

A MIN függvényt feltételben (where) nem lehet használni
(csak esetleg egy beágyazott lekérdezés select-jében) ezért nem tudom hogy
miként lehetne összerakni ezt a select-et.

Ha van valakinek ilyen irányú tapasztalata és nem nagy kérés akkor
adjon tanácsot ezzel kapcsolatban.

Köszönöm.

PostgreSQL - UNICODE - BLOB - BYTEA

Sziasztok,
Tudja esetleg valaki, mi a módja annak, hogy egy UNICODE kódolású PG adatbázisba "bytea" típusú mezőbe (PostgreSQL alatt a BLOB mező) hogyan kell képet betölteni. A libpq.so modult hívódik direktbe, de sajnos a következő hibaüzenetet kapom:

"Invalid byte sequence for encoding 'UNICODE'"

Ha a klienst programomat UTF8 kódulású környezetben indítom az adatbázisba mentett szövegek helyesek lesznek, csak a BLOB írásával van gond.
A hiba Win32 és FC4 (LANG=hu_HU.UTF8) alatt is ugyan az! Ha az adatbázis kódolása Latin2/iso-8859-2, akkor m inden helyesen működik.

Attila

ui.: Jelenleg a ZeOS DBO modult használom, ami egy nyílt forrású nyűjtemény (Lazarus, Delphi, Kylix, BC++), szeretném kijavítani.

Firebird SQL D3 - record not found...

Sziasztok!

Van egy nagy problémám. Firebird 1.5 adatbázis SQL Dialect 3.
Egy tábla ID mezőjét generátorral töltöm. A mező integer típusú.
select ID from tabla where ID = 1 le is hozza a rekordot.
Ha azonban tárolt eljárásban próbálom kiadni ezt az utasítást, akkor már nem találja meg a rekordot!!!!

Arra mér rájöttem, hogy ha tároltban így adom ki a selectet:

select ID from tabla where cast(ID as integer) = 1

akkor lejön a rekord!!!

Ezután, ha kitörlöm a cast-ot a tároltban, akkor szintén működik. Firebird újraindítás után is. De nem tudom, hogy meddig fog.

Ugyanakkor van egy másik 'jelenség' is. Egy tárolt eljárásban (szintén generátor segítségével) beszúrok 20 rekordot. Utánna normál lekérdezés esetén az első rekordot megtalálja így:

select id from tabla where id = 1;

a másodikat (és a többit) már nem! Tehát a

select id from tabla where id = 2;
már nem hoz eredményt. Viszont:

select id from tabla where not (id <> 2);
lehozza a rekordot!!!

Találkozott már ilyennel valaki? SQL dialect 1 esetén nincs ilyen problémám....

Postgresql SUM(20)-SUM(0)=NULL bugot találtam vagy valami elkerüli a figyelmemet?

Sziasztok!

Találtam ezt a furcsa eredményt adó lekérdezést a postgresben, csatolom hozzá a táblát és a rekordot, amivel a hiba előjön. Ha valakinek van tippje, hogy mi okozhatja, ossza meg velem:)

SELECT SUM(ulaz)-SUM(izlaz) FROM proba;

Ennek a lekérdezésnek lesz üres rekord az eredménye, annak ellenére, hogy az ulaz mezőben 20 van.

CREATE TABLE proba (
magacin character varying(3),
roba bigint,
stroba character varying(9),
vs character varying(1),
dokument character varying(6),
pozicija character varying(6),
veza character varying(3),
komitent character varying(6),
datum date,
zavrtrosak double precision,
rabat real,
marza real,
dobit double precision,
tarifa character varying(5),
porez1 real,
porez2 real,
porez3 real,
ulaz double precision,
izlaz double precision,
zalihe double precision,
nabcena double precision,
proscena double precision,
cena double precision,
nabvred double precision,
nivvred double precision,
zuser character varying(10)
);

INSERT INTO proba VALUES ('301', 8605008915459, NULL, 'u', ' 381', NULL, NULL, ' 11190', '2006-07-07', 0, 0, 0, 33.299999999999997, NULL, 0, 0, 0, 20, NULL, NULL, 0, 92.700000000000003, 126, 1854, NULL, NULL);

Mysql, egyes beállítások configból nem, csak SQL konzolról állíthatóak

A következő beállítások közül a kikommentelteket a MySQL (5.0.22-standard, gyári bináris; x86_64; slamd 10.2.0) nem hajlandó elfogadni a /etc/my.cnf fájlból, csak úgy, ha a SET -l kézzel állítom be. Van valakinek valami tippje, hogy miért?

[mysqld]
[...]
# character_set_client = utf8
# character_set_connection = utf8
# character_set_database = utf8
# character_set_results = utf8
character_set_server = utf8

# collation_connection = utf8_hungarian_ci
# collation_database = utf8_hungarian_ci
collation_server = utf8_hungarian_ci

Hibaüzenet, ha az egyik elől kiveszem a kommentet:

# /etc/rc.d/rc.mysql start
# 060710 0:08:10 [ERROR] /usr/local/mysql/bin/mysqld: unknown variable 'character_set_results=utf8'

így viszont megy, (csak persze így nem jó nekem):

mysql> show variables like 'character_set_r%';
+-----------------------+---------+
| Variable_name | Value |
+-----------------------+---------+
| character_set_results | latin1 |
+-----------------------+---------+
1 row in set (0.00 sec)

mysql> set character_set_results = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'character_set_r%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| character_set_results | utf8 |
+-----------------------+-------+
1 row in set (0.00 sec)

Firebird 1.5 esetén +10-2,552-6,112-1,336 != 0

Sziasztok!

Firebird 1.5 esetén van egy nagy problémám.

4 rekordom van a táblában, a kód mező értéke minden esetben "Alma", a db mezők (numeric 15,3) értéke rendre:
+10
-2.552
-6.112
-1.336

select sum(db) from tabla
látszólag visszaadja, hogy 0.000 azonban ha tárolt eljárásban dolgozom
vele, akkor a változó, amelybe betöltöm az értéket 2,22044604925031E-16-ot
vesz fel, vagyis egy nagyonpici számot, de nem 0-t.Tovább mentem a kétségbeesés útján:
select kod from tabla having sum(db) > 0

erre lehozza, hogy Alma!

select kod from tabla having sum(db) > 0.1

erre meg semmit! Persze a tények ismeretében nem csodálkozom rajta, csak nem értem :)

Találkozott már valaki ilyennel? Miért nem kerekít ilyenkor 3 tizedesre?
Mit lehet tenni? Folyton kerekítsek? Ettől nagyon belassulna a lekérdezés szerintem.

Várom az ötleteket.

Köszi!

Misi

Postgres felhasználói...

Sziasztok!

Ma vmiért 'megbutult' a PostgreSQL adatbázisom. Nem enged belépni külső felületről (pl: phpPgAdmin) és másik usernév alól sem (pl biboka helyett root vagy bármi más). A norm user alól azonban teljesen jól működik.

Beléptem,

>psql biboka

és átírtam a jelszót:

ALTER USER biboka UNENCRYPTED PASSWORD 'uj_jelszo';

de az új jelszóval sem működött sehonnan.

Az utóbbi napokban nem nagyon piszkáltam az adatbázist, ma d.e. még rendesen ment. Ami max befolyásolhatta az a PHP újrafordítása, habár ezt is kétlem. Találkozott már vki ilyennek? Tudtok rá vmi megoldást?

Előre is köszönöm!