Тема
|
Малко помощ за SQL заявка за MySQL 3.23?
|
|
Автор |
bira_more (бира) |
Публикувано | 28.01.04 14:35 |
|
Имам таблица в която се записват резултати от опити за зареждане на код в pcb.
Основните полета са
pcb (varchar) - ID на PCB'то
chanch (timestamp)
result (int) 0 - успешно зареждане, всяко друго число е код на грешка
В таблицата може да има един запис за PCB или няколко, ако са няколко може един от тях да е успешен, може да няма успешен
Тоест
select * from remoteload where chanch>'20040126235959' and result =0
Ще извади всички успешни зареждания.
Има ли някакъв начин да избера само неуспешните?
Тоест PCB които нямат нито едно успешно зареждане.
Мерси предварително
|
|
|
Ако ненулевите кодове са винаги по-големи от нула:
SELECT ... MIN( ) AS min_code .... HAVING min_code > 0;
select * from remoteload where chanch>'20040126235959' and result =0
SELECT pcb, MIN(result) AS min_result
FROM remoteload
WHERE chanch>'20040126235959'
GROUP BY pcb
HAVING min_result > 0;
За да извадиш целите редове се иска малко повече гимнастика понеже това си е типична задачка за вложена заявка.
т.нар. MAX-CONCAT трик
Редактирано от salle на 28.01.04 18:24.
|
|
|
ама тъпото е че част от кодовете са по малки от нула, а другите по големи....
Е ще се справя - 300 устройства, 5 "дефектни"
С един ордер по PCB и след това много малко гимнастика в OpenOfice - и съм готов - щото то 5 дефекта ще се хванат по бързо от колкото го описвам ама :)
|
|
|
ама трябва вместо MIN() да измислиш някоя по-сложна комбинация ...
така като се замисля безкрайно сложното MIN(ABS()) ще свърши работа ...
SELECT pcb, MIN(ABS(result)) AS min_result
FROM remoteload
WHERE chanch>'20040126235959'
GROUP BY pcb
HAVING min_result > 0;
|
|
|
Утре ще го пробвам и ще пиша резултат.
Ма днес съм на много бири и ... :)
Пробвах го - не мога а кажа все още дали мога да му вярвам ама май е това което ми трябва :))
Щот си имам един - два други бъга и няколко засечки :)))
Ми мнго мерси :)))Редактирано от bira_more на 29.01.04 20:46.
|
|
|
С риск да се изложа за пореден път в този форум, това не ти ли върши работа:
select * from remoteload where chanch>'20040126235959' and result != '0'
Така би трябвало да получиш всички записи, при които result не е нула, независимо дали са по-малки или по-големи от нула, просто - различни от нула.
Или може би
select distinct(pcb) from remoteload where chanch>'20040126235959' and result != '0'
Редактирано от $burov на 29.01.04 21:12.
|
|
Тема
|
Re: Много мерси
[re: $burov]
|
|
Автор |
voyager (прасе в космоса) |
Публикувано | 29.01.04 21:58 |
|
В първия момент и аз си помислих за това. Погледни го пак и ще видиш защо няма да помогне 
|
|
Тема
|
Re: И аз така в първия момент :)
[re: voyager]
|
|
Автор |
salle (един такъв) |
Публикувано | 29.01.04 23:06 |
|
Даже го пуснах тук ата се наложи после да преписвам...
Хичи не се излагаш. Той малко неясно го е написал. Ключът към целия проблем е ей тука:
"Тоест PCB които нямат нито едно успешно зареждане. "
|
|
Тема
|
Re: И аз така в първия момент :)
[re: salle]
|
|
Автор |
ro6avia (ламерясал) |
Публикувано | 30.01.04 14:27 |
|
А бе аз мислих нещо от сорта на JOIN на таблицата към самата себе си
където в лявата и част да са всички дето са !=0 а в дясната =0
и тези които имат само лявата част -> демек нямат 0 като резултат да излязат
ама не ми остана време да го сътворя
Е тук нищо няма:
|
|
Тема
|
Определено действа заявката на salle
[re: ro6avia]
|
|
Автор |
bira_more (бира) |
Публикувано | 30.01.04 15:15 |
|
И аз понеже съм си недоверчив - направих няколко проби :
select * from remoteloads where chanch>'20040126235959' group by pcb
Така хващам колко уникални PCBта са зареждани
select * from remoteloads where chanch>'20040126235959' and result=0 group by pcb
Хващам колко са заредени успешно
Разлика - 4 бр (едно от които си го бях добавил ръчно да знам поне един грешен резултат със сигурност :)
И точно тези четири броя ми излизат със заявката на salle.
|
|