- Samsung Galaxy Watch7 - kötelező kör
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- iPhone topik
- Google Pixel topik
- Friss koncepciót hoz a Nothing Phone (3)
- Xiaomi 15 - kicsi telefon nagy energiával
- 200 megapixeles zoomkamerát sem kap az S26 Ultra?
- One mobilszolgáltatások
- Nothing Phone (3a) és (3a) Pro - az ügyes meg sasszemű
- Samsung Galaxy S23 Ultra - non plus ultra
Új hozzászólás Aktív témák
-
tm5
tag
Nem nagyon használom én se, csak van néhány kollégám akik rá vannak függve.
És igen ha ilyen kell akkor én is a MERGE-öt szoktam. Csak akkor amikor ez a kérdés felpattant pont egy ilyen csináltunk a melóban.Ha már veszélyesen élés akkor, hadd említsem az Updateable viewk tömkelegét INSTEAD OF triggerekkel. A fél ház (WS backend) ezen lóg.
-
tm5
tag
válasz
Jim Tonic #5856 üzenetére
SELECT ceg, adoszam, datum
FROM
(SELECT ceg, adoszam, datum,
ROW_NUMBER() OVER (PARTITTION BY ceg ORDER BY datum DESC) rnum
FROM Table) x
WHERE rnum = 1UPDATE T -- nem emlékszem, hogy kell-e ide az alias
SET Ref = 1
FROM Tabla T
JOIN (SELECT ceg, adoszam, datum
FROM
(SELECT ceg, adoszam, datum,
ROW_NUMBER() OVER (PARTITTION BY ceg ORDER BY datum DESC) rnum
FROM Table) x
WHERE rnum = 1 ) jo ON T.ceg = jo.ceg AND T.adoszam = jo.adoszam AND t.datum = jo.datum
Némileg egyszerübb lenne a JOIN ha lenne egy ID oszlopa is a táblának. -
tm5
tag
válasz
rednifegnar #5787 üzenetére
Juj, hát én ezeket nagyon hamar elkezdeném automatizálni, pl. Powershell scriptekkel. Vagy ha a cég elég nagy akkor valami rendes workflow manager szoftvert vetetnék, pl. BMC Control-M, vagy bármi ahol ezek a lépések, mint egy job, lefut ha tud és elhal ha nem. Akkor kijavíthatod és újrafuttathatod a jobot.
Én nem bírnám sokáig ezt kézzel managelni... -
tm5
tag
Erről a PREGEXP-ről még soha nem hallottam SQL SELECTben. Milyen SQL szerverről beszélünk itt? Mert eléggé eltérő módon támogatják a regexp-et, vagy nem.
Valami ilyesmi kellene:
UPDATE cikk
SET information = <az EAN forrása>
WHERE information NOT LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' -
tm5
tag
válasz
Apollo17hu #5468 üzenetére
Ez talán még jobb, csak annyi kéne még hozzá, hogy adnék egy "minimum rank" értéket a t2 táblához és a query végén ahhoz hasonlítanám a match_rate-et és akkor tovább csökkennne a false pozitiv:
select t1.*, tt.kategoria
from t1
left join
(
select t.*, RANK() OVER(PARTITION BY t.id ORDER BY t.match_rate desc) AS rnum
from
(
select
t1.id
,t2.kategoria
,
(case when ifnull(t1.m1,'*') != ifnull(t2.m1,'*') then 0 when ifnull(t1.m1,'*') = ifnull(t2.m1,'%') then 1 else 0 end) +
(case when ifnull(t1.m2,'*') != ifnull(t2.m2,'*') then 0 when ifnull(t1.m2,'*') = ifnull(t2.m2,'%') then 1 else 0 end) +
(case when ifnull(t1.m3,'*') != ifnull(t2.m3,'*') then 0 when ifnull(t1.m3,'*') = ifnull(t2.m3,'%') then 1 else 0 end) +
(case when ifnull(t1.m4,'*') != ifnull(t2.m4,'*') then 0 when ifnull(t1.m4,'*') = ifnull(t2.m4,'%') then 1 else 0 end) +
(case when ifnull(t1.m5,'*') != ifnull(t2.m5,'*') then 0 when ifnull(t1.m5,'*') = ifnull(t2.m5,'%') then 1 else 0 end) +
(case when ifnull(t1.m6,'*') != ifnull(t2.m6,'*') then 0 when ifnull(t1.m6,'*') = ifnull(t2.m6,'%') then 1 else 0 end) +
(case when ifnull(t1.m7,'*') != ifnull(t2.m7,'*') then 0 when ifnull(t1.m7,'*') = ifnull(t2.m7,'%') then 1 else 0 end) +
(case when ifnull(t1.m8,'*') != ifnull(t2.m8,'*') then 0 when ifnull(t1.m8,'*') = ifnull(t2.m8,'%') then 1 else 0 end) as match_rate
, t1.m1
, t1.m2
, t1.m3
, t1.m4
, t1.m5
, t1.m6
, t1.m7
, t1.m8
from t1 join t2
--order by 1,3 desc;
) t
) tt on t1.id = tt.id and tt.rnum = 1 and tt.match_rate > 0 -
tm5
tag
válasz
Apollo17hu #5468 üzenetére
Hát én valamni ilyesmivel indítanék:
select t.*, ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.match_rate desc) AS row_num2
from
(select
t1.id
,t2.kategoria
,
(case when ifnull(t1.m1,'*') != ifnull(t2.m1,'%') then -100 when ifnull(t1.m1,'*') = ifnull(t2.m1,'%') then 1 else 0 end) +
(case when ifnull(t1.m2,'*') != ifnull(t2.m2,'%') then -100 when ifnull(t1.m2,'*') = ifnull(t2.m2,'%') then 1 else 0 end) +
(case when ifnull(t1.m3,'*') != ifnull(t2.m3,'%') then -100 when ifnull(t1.m3,'*') = ifnull(t2.m3,'%') then 1 else 0 end) +
(case when ifnull(t1.m4,'*') != ifnull(t2.m4,'%') then -100 when ifnull(t1.m4,'*') = ifnull(t2.m4,'%') then 1 else 0 end) +
(case when ifnull(t1.m5,'*') != ifnull(t2.m5,'%') then -100 when ifnull(t1.m5,'*') = ifnull(t2.m5,'%') then 1 else 0 end) +
(case when ifnull(t1.m6,'*') != ifnull(t2.m6,'%') then -100 when ifnull(t1.m6,'*') = ifnull(t2.m6,'%') then 1 else 0 end) +
(case when ifnull(t1.m7,'*') != ifnull(t2.m7,'%') then -100 when ifnull(t1.m7,'*') = ifnull(t2.m7,'%') then 1 else 0 end) +
(case when ifnull(t1.m8,'*') != ifnull(t2.m8,'%') then -100 when ifnull(t1.m8,'*') = ifnull(t2.m8,'%') then 1 else 0 end) as match_rate
, t1.m1
, t1.m2
, t1.m3
, t1.m4
, t1.m5
, t1.m6
, t1.m7
, t1.m8
from t1 join t2
--order by 1,3 desc;
) t
de e kőré még kell valami ilyesmi:select t1.*, tt.kategoria
from t1
left join
(
-- ide jon az elozo query
) tt on t1.id = tt.id and tt.rnum = 1 and tt.match_rate != -800
De ez még nem tökéletes. Van benne néhány fal pozitív kategória.Azért szedtem ketté, mert azzal a belső queryvel még kell játszani és finomhangolni a match_rate-et
Jah és remélem nem olyan sok rekord van egyik táblában sem, mert azért a descartes szorzat befigyel rendesen.
-
tm5
tag
Na hát ez egy gyönyörű példa az SQL Injection exploit implementálására.
Szóval ilyet nem szaban csinálni, Indián kivül ezt valszeg mindenütt tudják.SQL tananyag magyarul. Az UPDATE szóra rákeresve találsz példákat magyarázattal.
SQL UPDATE C#-ban paraméterekkel -
tm5
tag
válasz
Apollo17hu #5464 üzenetére
Tegyük fel, hogy T2-ben ez van:
('Bela', null, 'Bela',null,null,null,...)
('Cecil', null, ,null,'Cecil',null,null,...)
T1-ben:
(1234, 'Aladar', 'Bela', 'Cecil',null,null,...)
Ez most Bela vagy Cecil lesz a defaulting szabály alapján, ha nincs kategória a T2-ben erre a hármas kombinációra? -
tm5
tag
válasz
Apollo17hu #5462 üzenetére
A kategoria kötődik az m1..mn mezők sorrendjéhez?
Pl: insert into t2 (kategoria, m1, m2, m3, m4, m5, m6, m7, m8) values ('BelaElemer', NULL, 'Bela', NULL, NULL, 'Elemer', NULL, NULL, NULL);
itt pl.a kategória értéke más lenne, ha m6=Bela és m3=Elemer?
Akkor is "BelaElemer" ha m1=Bela és m2="Elemer"?
És lehetne még 1000 hasonló kérdésem a kategória képzéssel... -
tm5
tag
válasz
bambano #5150 üzenetére
SELECT TRUNC(datum) AS nap,
CASE WHEN DATEPART(HOUR,datum)>11 THEN 'DU' ELSE 'DE' END AS napszak,
SUM(szam) AS osszeg
FROM tabla
GROUP BY nap,
CASE WHEN DATEPART(HOUR,datum)>11 THEN 'DU' ELSE 'DE' END
ORDER BY 1,2
Legyen neked Karácsony Nálunk 12 és 1 között ebéd szünet van, olyan senkiföldje. -
tm5
tag
Szerintem le kellene ülni és összeszedni, hogy mik az elvárások és az alapján tervezni egy adatbázist, mert most minden posztodban kiderül valami újabb dolog.
A category oszlopot inkább kiraknám egy külön táblába, mondjuk úgy, hogy ha van egy category szótárod (cat_id, cat_name) akkor lenne egy un. junction táblád (tabla_id, cat_id)
és akkor cat_id alapján gyorsan tudnál keresni. Ez esetben lehetne az IN operátort is használni. Kerüljük a redundanciát ha lehet. Egy Microsoft SQL-es MVP már 15 éve azt írta, hogy egy rendes 3. normálformájú adatbázis sokkal jobban teljesít, mint egy redundanciával teli.Én amúgy szeretek kompozit indexek helyett külön indexet használni leggyakrabban keresett oszlopokra. Esetleg megpróbálhatod ezt is.
-
tm5
tag
válasz
RoyalFlush #5029 üzenetére
SELECT TRUNC(RENDELES_DATUM, 'MONTH') HONAP, COUNT(*) DARAB
FROM TABLA
WHERE TERMEK = 'Termék2'
GROUP BY TRUNC(RENDELES_DATUM, 'MONTH')
ORDER BY 1 DESC -
tm5
tag
és egy másik:
select
t1.id
, t1.valid_from as date1
, t2.valid_from as date2
, t1.attr1
, t2.attr2
from t1 left outer join t2 on (
(t1.valid_from >= t2.valid_from and t1.valid_from < t2.valid_to)
)
union
select
t2.id
, t1.valid_from as date1
, t2.valid_from as date2
, t1.attr1
, t2.attr2
from t2 left outer join t1 on (
(t2.valid_from >= t1.valid_from and t2.valid_from < t1.valid_to)
) -
tm5
tag
In case anyone is interested in:
Született egy megoldás, most integrálom a való világba.:with
dt AS
(
select valid_from d from t1
union
select valid_from d from t2
)
select
dt.d
, coalesce(t1.id, t2.id) as id
, t1.valid_from as date1
, t2.valid_from as date2
, t1.attr1
, t2.attr2
from dt
left outer join t1 on (dt.d >= t1.valid_from and dt.d < t1.valid_to)
left outer join t2 on (dt.d >= t2.valid_from and dt.d < t2.valid_to) -
tm5
tag
Csináltam hozzá egy SQL Fiddle -t is. Hátha úgy könnyebb.
-
tm5
tag
Hi,
Van egy feladat amivel szívok egy ideje. Van 2 tábla amiben dátumok vannak egy ID-val ezeket kellene kombinálnom őket 1 viewba ahol egymás mellett hozom a dátumváltozásokat. Pl.
T1(ID, Date1, Attr1):
1, 2018.01.01, A
1, 2018.02.01, B
1, 2018.03.01, C
1, 2018.03.20, DT2(ID, Date2 Attr2):
1, 2018.01.09, F
1, 2018.03.01, G
1, 2018.03.03, H
1, 2018.03.22, I
1, 2018.03.25, JA VIEW elvárt eredménye:
ID, Date1, Date2, Attr1, Attr2
1, 2018.01.01, null, A, Null
1, 2018.01.01, 2018.01.09, A, F
1, 2018.02.01, 2018.01.09, B, F
1, 2018.03.01, 2018.03.01, C, G
1, 2018.03.01, 2018.03.03, C, H
1, 2018.03.20, 2018.03.03, D, H
1, 2018.03.20, 2018.03.22, D, I
1, 2018.03.20, 2018.03.25, D, J
(Ez talán tartalmaz minden esetet amivel szívok), Amúgy MS SQL.
Eddig bármit raktam össze valamelyik sor hiányzott, vagy nem a megfelelő volt a Date1. Mindkét táblában vannak még további attributumok és azokat is hozni kell a dátum oszlop alapján. Egy táblában dátum ismétlődés nincs, de van még egy Valid_from Valid_to oszlop is ahol a Valid From az a Date1/2 a Valid_to a következő rekord Date1/2-je, ha ez segít...Bármi ötletet szívesen veszek.
-
-
tm5
tag
válasz
Apollo17hu #4895 üzenetére
Jó ez teljesen, nem lesz ez annyira lassú. Picit mondjuk lehet még egyszerűsíteni rajta:
select sum(value)
,case
when sector in (2, 3, 4) then 2
else sector
end sector_
from test
group by
case
when sector in (2, 3, 4) then 2
else sector
end -
tm5
tag
A feladatsor amit átküldtél tényleg elég részletes, és valszeg több este is le kell ülnöd a gép elé, hogy meglegyél vele 1 hét alatt. Viszont mindent amit ez a felkészítő feladatsor követel biztosan benne van a tananyagban, vagy a google kiköpi, ha okosan keresel.
Szóval ma rugjál be és dühöngd ki magad, hogy mégis mit gondol ez a tanár és holnap kezd el csinálni, mert csak így fogsz tudni végezni vele.
fogd fel etzt a felkészítő feladatsort, hogy egy labogyakorlat.
Jártam jó pár adatbázis tanfolyamon az elmúlt 30 évben és azok jobbára 3-5 nap alatt nyomták le ezt az anyagot, de tele volt tűzdelve laborgyakorlatokkal, amiben ehhez hasonló feladatok voltak. A tanköny + a tanár segítségével megoldottuk. Most neked a tanár helyett a google marad. Viszont amit 1x megcsinálsz arra tuti emlékezni fogsz, legalább nagyvonalakban. Arra elég, hogy túléld a 36 perces vizsgákat. Ennyi időbe a feladatok töredéke fog beleférni.
Hidd el csak az segít, ha elkezded csinálni. -
tm5
tag
Az a helyzet, hogy sqlfiddleben vagdostam össze, internetes szösszenetek alapján.
Nem használtam MSSQL-t az elmúlt 8 évben, bár lehet a következő munkám már megint ott lesz.
Oracleben nyomultam mostanság, ott elég jó ez a FORMAT() dolog és valami hasonlót kerestem MSSQL-ben is. -
tm5
tag
Amúgy csak megérteni szeretnéd, vagy átírni?
(Kis csiszolgatás után) beraktam beraktam sqlfiddle-be a mintádat, de nem sok értelmeset produkált: (null),1,...6-ig hozta az összes ID-t
Ha esetleg szeretnél hierarchiát építeni SQL Serverben arra ott a rekurzív CTE
-
tm5
tag
válasz
Micsurin #4812 üzenetére
Még annyit érdemes tudni a többiek által leírtakon túl, hogy van egy TRUNCATE TABLE parancs, ami ugyanúgy kitöröl mindent egy táblából mint a DELETE parancs, csak DDL utasításként viselkedik, tehát azonnal végrehajtódik és nem is lehet rollback-elni. A DELETE-et a tranzakción belül még igen. Cserébe villámgyors. A DELETE az sok rekordra nagyon lassú tud lenni.
-
tm5
tag
válasz
pvt.peter #4762 üzenetére
Itt tárgyalnak 1-2 opciót, mindegyiknek az a lényege, hogy 2 külön oszlop legyen a 2 referencia. Az egyik azt mondja, hogy tedd őket egy külön táblába, a másik rögtön a céltáblába (nálad ez a C tábla) és egy CONSTRAINT CHECK-kel lehet ellenőrizni.
Nekem alternatívaként még 2 dolog jutott eszembe:
- ellenőrzés Insert triggerben, itt van is egy példa rá
- írsz egy tárolt eljárást az INSERT-re és ott már azt ellenőrzöl ami jól esik. -
tm5
tag
válasz
Heavyrain #4749 üzenetére
Hát egy normális SQL-ben kb. így nézne ki:
SELECT t.a, t.b
FROM tabla t
, (SELECT a, COUNT(*) FROM
(SELECT DISTINCT a,b FROM tabla)
GROUP BY a
HAVING COUNT(*)>1) x
WHERE t.a = x.a
Ha ez már túl sok az Accessnek, akkor csinálj az eredeti táblából a DISTINCT-es verziót (tabla2), majd erre egy SELECT a, COUNT(*) FROM table2 GROUP BY a HAVING COUNT(*) >1. Ez lesz a tabla3 és ezt joinold össze az eredeti tabla-val -
tm5
tag
Én is valami hasonlóra jutottam, mint nyunyu, hogy ehhez minimum egy tárolt eljárás szükséges, ezt 1 sql paranccsal nagyon nem lenne egyszerű megoldani.
Valami olyasmit csinálnék, hogy generálnék 2 listát (plusz(i): pozitívok csökkenő sorrendben, minusz(j): negatívok növekvő sorrendben) és mennék végig a minusz listán úgy, hogy a plusz-os lista aktuális elemével megpróbálnám kiegyenlíteni a negatív értéket. ha nem tudom, akkor nézem a következőt a minuszból. Addig megy a ciklus, amíg a végére nem érsz valamelyik listának. + eköré még kellene még egy loop ami az elején újraszámolja a plusz, minusz listákat és addig megy amíg vannak update-ek. Valami ilyesmi lenne... -
tm5
tag
válasz
bambano #4670 üzenetére
Hát a lenti feladatleírás alapján ha az ID nő akkor a DATUMnak is növekvőnek kell lennie.
Tehát ha ID1 < ID2 < ID3 < ID4 < ID5... akkor DATUM1 < DATUM2 < DATUM3 < DATUM4 < DATUM5... az elvárt állapot. Ezek alapján szerintem fölösleges a DATUM5-t mondjuk a DATUM2-vel hasonlítani, elég csak DATUM4-gyel, mert nem hiszem, hogy van olyan eset, hogy kisebb lenne DATUM2-nél de nagyobb mint DATUM4.
Szóval igen, ez csak egymás utáni párokat vizsgál, de szerintem ez elég.
Szmeby:
Én szeretem használni a WITH-et, mert jobban elszeparálja az egyes logikákat egymástól. Jelen esetben akkor a teljes LEAD-es részt bele kellett volna tenni a WHERE-be is, mert ugye ugyanazon queryn belül nem tudod a SELECT-ben megadott aliasokat a WHERE feltételben használni. Szóval így szebb és érthetőbb.
A next_id azért kellett, mert így látod, hogy melyik két egymást követ ID-nál van gond a dátumokkal. De elhagyható...Szerintem ez jóval gyorsabb (vagy csak "olcsóbb" ha nem nagy a tábla), mint egy Descartes szorzat. Én napi szinten használok analitikus SQL kifejezéseket millió soros táblákon Oracle-ben és szerintem nagyon jól optimalizált a futtató mögötte. Tény, hogy ebbe az Exadata is besegít.
-
tm5
tag
válasz
RoyalFlush #4664 üzenetére
Analitikus függvényekkel is neki lehet esni és akkor nem kell descartes szorzat:
WITH src AS (
SELECT
id
, datum
, LEAD(id) OVER ( ORDER BY ID ) next_id
, LEAD(datum) OVER ( ORDER BY ID ) next_datum
FROM datumok)
SELECT *
FROM src
WHERE datum > next_datum -
tm5
tag
válasz
bambano #4600 üzenetére
Ez teljesen igaz és azt volt az első dolgom, hogy körbenézzek a cégnél, hogy milyen "dobozos" system monitoring cuccok vannak már beüzemelve(Grafana, ELK, stb.) , hogy ne az n+1-et telepítsem. Viszont egyik sem arra lett kitalálva, hogy azt monitorozza amit nekem kell.
Egy tesztelő kolléga már össze is rakott valamit regression teszt gyanánt pythonban.
Na ez megtetszett nekem és én is lejutottam oda, hogy akarok csinálni egy dashboardot a cuccaimnak. Na ebből lett az idei smart goal-om. Ha multinál dolgozol akkor érted, hogy mire gondolok.
Igen, DIY lesz, de mértékkel, mert az üzleti logikára akarok fókuszálni és nem az infrastruktúrára. De néha össze kell koszolni a kezünket, ha tanulni akarunk. -
tm5
tag
Mondjuk a főnök minden hétfő reggel 8-ra kér valami riportot excelben a mailboxába.
Lehet menne SQLből is, de ez pythonban tényleg csak egy pár sor. Mondjuk kell valami ütemező is. OK, ez épp pont nem data analysis , hanem csak egy kis automatizáció, de pont azt mutatja, hogy mennyi mindenre jó.
Én is most kezdek majd belemélyedni pythonba a sok SQL-ezés mellett, mert össze akarok rakni egy dashboardot arról, hogy 1. megy a rendszer 2. jók az adatok.
De ha nagyon tanulni akarsz valamit az SQL mellett akkor lehet érdemes megnézned az AWS-t vagy Azure-t. Most ezek a menő dolgok...a python mellett persze. -
tm5
tag
Hát akkor lehet váltanék a helyedben egy olyan helyre ahol DBA-t keresenek és elfogadják az SQL-es múltadat és a szándékot, hogy te ebbe az irányba akarsz fejlődni.
A DBA-s tanfolyamok elég drágák, életszerű tudást úgyis meg munka közben lehet felszedni.
Tippre azt mondanám, hogy Oracle-s DBA-t többet keresnek, mint MSSQL-est. Mivel mind a két dialektussal foglalkoztál érdemes mind a két irányba próbálkozni, aztán amelyiknél hamarabb beesik a munka abban elmélyedni... -
tm5
tag
Iskola alatt tanfolyamos cégekre gondolsz? Olyanok vannak, illetve, hát, az Oracle-nak vannak különböző adminisztrációs tanfolyamai aranyárban. Szerintem ezeket olyanok tarthatják csak akik tudnak hozzá infrastruktúrát (sandbox-okat) biztosítani, akárki nem. Én kb. ezekkel kezdeném:
12c administration , Grid infrastructure
Lehet vannak újabbak is belőle. Viszont nem 2 fillérek. Valahogy a cégedet, ahol dolgozol, kéne rávenni, hogy finanszírozzák. Illetve ha multi akkor be kellene rotálni a DBA csapatba. -
tm5
tag
válasz
user112 #4566 üzenetére
UNION-nál a benne lévő SELECT-ek oszloplistáinak meg kell egyeznie legalább darabszámra és adat tipusra. Olyan nincs hogy "select a,b union select c".
Ha meg nem akarsz group by-olni valamilyen oszlopra, akkor meg ne tedd bele azt az oszlopot a select listába.
Vagy nem értem a problémádat... -
tm5
tag
SQL Szerver replikáció nem játszik? Nem használtam sose. De ez elég régóta egy elérhető feature. Szóval ha olyat kellene csinálnom amit írtál, én ezt (a beépített replikációt) nézném meg először, hogy hogy működik.
Amúgy pontosan mi a lassú? Konkrétan a rekordok átmásolása, vagy nagy a késleltetés (latency) a két szerveren lévő adatok állapota között?
SSIS-t sem használtam, de azzal is megpróbálnám, ha ez csak olyan batch/bulk jellegű másolás lenne. Általában ezek az integrációs eszközök elég jók.
-
tm5
tag
Jogos, azt zavart be, hogy 32 karakteren ábrázolják/tárolják, nem pedig egy 128 bites számként.
Viszont még az is eszembe jutott, hogy ha valahol letárolod, hogy mi volt a legnagyobb dátum amit még beszúrtál, akkor a log file olvasáskor figyelmen kívül hagyhatsz minden olyan sort ami annál régebbi. Az újabbakat meg simán inzertálod. Csak ne felejtsd el letárolni az új MaxRowLoadDate-et a log feldolgozás végén.
-
tm5
tag
Mekkora az MD5 hash mérete? Mert ha nagyon nagy akkor le kéne cserélni egy INT-re mint kulcs. Azzal gyorsabb keresni.
Pontosan mit/hogy szeretnél tárolni az adatbázisban?
Kicsit homályos az a rész, hogy nap végén beszúrod a napi log bejegyzéseket egy táblába, majd kiüríted a logot néhány bejegyzés kivételével és másnap újból ugyanabba a fájlba írnál új logokat? Miért nem másolod el egy másik fájlba azokat amit nem akartsz törölni és akkor a log fájl tartalmából mindig insert lenne csak?
Amúgy ami a kérdéseidet illeti (bár nem ismerem az SQLiteot):
- tennék egy indexet a kulcsra, úgy a leggyorsabb keresni illetve kéne rá a primary key megszorítás és akkor nem szúrhatná be ugyanazt a sort kétszer.
- Mindenképpen INSERT rögtön, nem kell SELECT előtte és valamilyen try - catch jellegű dolog köré elkpani a hibaüzenetet. BTW, UPDATE lenne a benn lévő soron vagy nem? -
tm5
tag
válasz
BuktaSzaki #4425 üzenetére
Még esetleg a PIVOT is jó lehet neked:
SELECT * FROM
(SELECT szerzodesID, tetel FROM szerzodesek)
PIVOT
(COUNT(*) for tetel('tetel1' tetel1, 'tetel2' tetel2)
)
Így a szerződés azonosító mellett 1-1 oszlopban jelenik meg, hogy volt-e 'tetel1' illetve 'tetel2' érték hozzárendelve.
Az meg hogy sokáig fut, hát filterezni kell. Ez a query 1 táblát olvas végig. Ha ettől összeszakad, akkor alul van méretezve az a szerver. -
tm5
tag
válasz
BuktaSzaki #4422 üzenetére
SELECT szerzodesID, tetel
FROM szerzodesek
WHERE tetel = 'tetel1' OR tetel = 'tetel2'
ORDER BY szerzodesID -
tm5
tag
-
tm5
tag
válasz
zolynet #4326 üzenetére
Kb. minden SQL dialektusban, a 2. szám az a hossz, nem az "-ig" : [pl. MySQL ]
-
tm5
tag
válasz
david199801 #4083 üzenetére
Hát így első blikkre szerintem nem egészséges, ha az eljárás paraméternevek megegyeznek az oszlopnevekkel. Valahogy különböztesd meg őket.
Bár ez valszeg nem hiba, de engem kiráz a hideg azoktól a magyar ékezetes táblanevektől.
-
tm5
tag
válasz
kezdosql #4026 üzenetére
A válasz amit hallani szeretnél:
- Írd be a Google keresőbe, hogy adatbázis tananyag. Az első 5 link az pont azokat a könyveket/tananyagokat hozza amit el kellene olvasnod, megértened és alkalmaznod, hogy valami kisüljön abból amit szeretnétek.A válasz amit a kollégák mondanak:
- Ahhoz, hogy ebből a kezdeményezésből legyen valami életszerű cucc, akkor ennél komolyabb hozzáállás kell. Kellene egy un. rendszerszervező aki leül a kollégáiddal és összeszedi, hogy milyen közérdekű és hasznos adat van amit meg lehetne osztani másokkal. Rendszerezi ezeket és összeül egy (adatbázis)fejlesztővel/rendszertervezővel és összeraknak egy rendszertervet (benne egy adatbázistervvel) amivel már lehetne menni pénzt kuncsorogni a megvalósításra.Hidd el, ha nem lenne itt segítőkészség, akkor ez a fórum évekkel ezelőtt kihalt volna.
-
tm5
tag
válasz
kezdosql #4017 üzenetére
Én az általad leírt információk alapján és 30 éves adatbázisfejlesztői tapasztalattal azt javaslom, hogy kezdjétek el összerakni az adatokat egy Excelben. Bár táblázatkezelőként árulják, de nagyon sok üzleti adatkezelést (adatbázist) láttam már benne, vele elkészítve.
Rugalmas, egyszerű kezelni, bárki megtanulja, sok 100 000 sort lehet 1-1 oldalára rögzíteni. Hálózaton, felhőben (pl. Office 365) egyszerre többen is tudjátok párhuzamosan szerkeszteni.
Lehet benne lookup-okat (adatszótárakat) létrehozni és lehetne azt, hogy minden oldalra más adatokat (más rekordtípusokat) rögzítettek.Amikor eléritek az eszköz (Excel) korlátait, akkorra kialakul, hogy:
- tkp. milyen adatokat is akartok nyílvántartani
- mekkora adatmennyiségről van szó
- hányan férnének hozzá, milyen jogosultsággal
- és hogy mit is akartok kezdeni az összegyült adatokkal. (Pl. publikálni, weben megosztani, csak közigazgatás felé küldeni/fogadni).
Na ekkor kellene ezekkel a válaszokkal visszajönni ide a fórumba. -
tm5
tag
válasz
Petya25 #3973 üzenetére
Valami ilyesmi kellene:
SELECT *
FROM (
SELECT nev, ora, darab
FROM tabla
)
PIVOT ( sum(darab) FOR (ora) IN (10 'Ora 10', 11 'Ora 11', 12 'Ora 12') )
ORDER BY 1 DESC
A 10, 11, 12 óra értékek ha szövegek akkor tedd őket is aposztofok közé, illetve annyi ilyen 'ora-érték' 'ora-alias' párt kell felvenned az IN szekcióba, ahány oszlopra van szükség. -
tm5
tag
-
tm5
tag
Kb. ennyinek kéne lennie:
SELECT datum, service, usergroup, customer, napi/14.4
FROM
(
SELECT date(date) datum, service, usergroup, customer, count( * ) as napi FROM database.Availability
WHERE status='Up' and service = 'HTTP' AND usergroup = 'EMEA' AND customer = 'Customer1' GROUP BY
usergroup,server, date(date)
) -
tm5
tag
válasz
Peter Kiss #3892 üzenetére
Így van, de ha még most ismerkedik az SQL-lel akkor az Express is bőven elég.
A Developer Edition lényegében egy ingyenes Enterprise Edition, szóval sok olyan dolgot is tartalmaz ami neki szerintem fölösleges. -
tm5
tag
válasz
#74220800 #3890 üzenetére
Hát van MS SQL-ből és Oracle-ből is egy un. Express Edition ami ingyenes. Felrakod lokálisan magadnak és kész. De lehet, hogy ha csak egyszeübb dolgokat akarsz kipróbálni akkor az sql fiddle is elég neked.
-
tm5
tag
válasz
user112 #3784 üzenetére
Hát ennyi speckó alapján az alábbiak közül bármelyik jó lehet. Nem tudom melyik a preferált output neked:
-- egymas mellett
WITH sorsz8 AS (SELECT * FROM tabla WHERE SORSZ=8)
,sorsz12 AS (SELECT * FROM tabla WHERE SORSZ=12)
SELECT *
FROM sorsz8 a
LEFT OUTER JOIN sorsz12 b ON (a.azon = b.azon)
ORDER BY a.azon
-- egymas alatt
SELECT * FROM
(
SELECT * FROM tabla WHERE SORSZ=8
UNION
SELECT * FROM tabla WHERE SORSZ=12
)
ORDER BY azon, sorszIlletve az adatok (ismátlődések) ismeretében, esetleg UNION ALL a UNION helyett.
-
tm5
tag
válasz
bambano #3645 üzenetére
Ezt sqlfiddleben raktam össze:
/*schema setup:*/
create table t1(c1 integer);
insert into t1 values (1);
insert into t1 values (2);
insert into t1 values (3);
insert into t1 values (4);
insert into t1 values (6);
insert into t1 values (7);
insert into t1 values (10);
insert into t1 values (11);
/*a query:*/
select * from (
select c1,
CASE
WHEN plus1 != kovetkezo THEN 'vegelem'
WHEN minus1 != elozo THEN 'kezdoelem'
WHEN elozo IS NULL THEN 'kezdoelem'
WHEN kovetkezo IS NULL THEN 'vegelem'
ELSE 'kozbulso'
END tipus
from
(select c1, c1-1 minus1, c1+1 plus1, lag(c1) over () elozo, lead(c1) over () kovetkezo from t1) t) tt
where tipus != 'kozbulso';ezután már csak egy pivot kéne, de arra már nem volt energiám
-
tm5
tag
válasz
BeeGee2115 #3632 üzenetére
Szerintem nem kell rögtön táblát léterhozni ehhez, mert akkor minden Adatok tábla módosítás (insert/update/delete) után frissítened kellene a Számlák táblát.
Bőven elég egy lekérdezés:SELECT szamla, SUM(osszeg)
FROM adatok
GROUP BY szamlaMondjuk ez negatívval nem tartalmazza azt amikor az egyik számláról mozog a pénz a másikra. Ahhoz az kellene, hogy hozz létre egy negatív sort a "from" számlához is amikor onnan átkerül pénz a másikra.
-
tm5
tag
Érdekes, úgy rémlett, hogy később kijavítottam column_value-t SA.value-ra.
SUBSTR(sa.VALUE,4,LENGTH(sa.VALUE)-7)
: ide a 4 helyére azt kell írni, ahol kezdődik a tényleges érték. '<s>' ugye 3 karakter hosszú, tehát a negyedik karakternél fog kezdődni a tényleges mezőérték. A LENGTH(sa.VALUE)-7 megadja, hogy hány karakter hosszú a tényleges mezőérték. Ezt úgy kapjuk meg, hogy a mező teljes hosszából (LENGTH(sa.VALUE)) levonjuk a fölösleges rész hosszát. Ez a mi példánkban 7 volt, mert '<s>' és '</s>' összesen 7 karakter.Tehát ha a boolean-ből szeretnéd kibányászni a tényleges mezőértéket, akkor az így néz ki:
'<boolean>' hossza 9 (tehát a 10. karakteren fog kezdődni ami neked kell)
'</boolean>' hossza 10SUBSTR(sa.VALUE,10,LENGTH(sa.VALUE)-19)
-
tm5
tag
Hát a WHERE feltételben az van, hogy minden olyan rekordra fusson le aminél a mező értéke '<s>'-sel kezdődik és '</s>' -re végződik.
A SET-nél az van, hogy vágja ki a két fenti markup közti részt és rakja '<int>' és '</int>' közé.
Tehát így transzformál (elvileg):
'<s>1</s>' -> '<int>1</int>'
'<s>12</s>' -> '<int>12</int>'
'<s>999</s>' -> '<int>999</int>'
stb.Ha esetleg más szerkezetű (is) a mező tartalma, amit konvertálni kell, akkor írj már rá, légy szíves, néhány példát és akkor átfogalmazzuk a parancsot.
Új hozzászólás Aktív témák
Hirdetés
- Erő és sebesség? Most az Öné lehet! Ráadásul kamatmentes rèszletre is!
- Csere-Beszámítás! Olcsó RTX Gamer Laptop játékra! I5 11400H / RTX 3050Ti / 16GB DDR4 / 512GB SSD
- Csere-Beszámítás! Akciós Gamer PC! R5 5500 / GTX 1070Ti Rog Strix / 32GB D4 / 500GB SSD
- Újszerű Asus ExpertBook B1 B1500 - 15.6" FullHD IPS - i5-1235U - 16GB - 512GB SSD - Win11 - Garancia
- Bomba ár! Lenovo ThinkBook 15 G2 - i5-1135G7 I 16GB I 512GB SSD I 15,6" FHD I Cam I W11 I Gari!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest