Запрос по group by

Статус
В этой теме нельзя размещать новые ответы.

Ermitazh

Новичок
Запрос по group by

Всем привет.

Необходимо выбрать запись по следующим данным.
Например

code name date time pndate(code+date)
309 Kermit 01-01-07 08:00a 30901-01-07
309 Kermit 01-01-07 10:00a 3091-01-07

Если делать group by pndate, то выберется последняя запись.

Как нибудь можно выбрать полную запись с минимальным time используя group by?
 

Фанат

oncle terrible
Команда форума
какие древние у тебя записи - из 2001 года.
охота с таким старьем возиться
 

Фанат

oncle terrible
Команда форума
то есть, это не ирония, а правда?
и дата у тебя там - 7 января 2001 года?
 

Ermitazh

Новичок
да. именно так. в америке ведь даты так и пишутся.

-~{}~ 29.08.07 13:23:

месяц - число - год
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Ermitazh

да. именно так. в америке ведь даты так и пишутся.
А в MySQL-е даты хранятся в полях типа DATE, а не varechar-ах как храните Вы.
 

Ermitazh

Новичок
Mr_Max
это всего лишь пример, вопрос был совсем о другом.

Даты хранятся праильно, не беспокойтесь :)
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
то всего лишь пример, вопрос был совсем о другом.
можно
для это формат полей для хранения базы должен быть в _нормальном_формате.
Так понятно?

-~{}~ 29.08.07 12:37:

Даты хранятся праильно, не беспокойтесь
А вот врать нехорошо

и дата у тебя там - 7 января 2001 года?
месяц - число - год
То-есть 1 января 2007 года
Разницу чувствуете?



ORDER
 

Ermitazh

Новичок
хорошо, все поля в правильном формате (date в date и time в time). Теперь как можно тогда сделать выборку?
 

Фанат

oncle terrible
Команда форума
Ermitazh
у тебя во второй строчке примера данных опечатки нет?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Ermitazh
Прочитав мануал.
 

Ermitazh

Новичок
Mr_Max
По какой конкретно функции?

-~{}~ 29.08.07 13:41:

*****
Да, извини, есть.

code name date time pndate(code+date)
309 Kermit 01-01-07 08:00a 30901-01-07
309 Kermit 01-01-07 10:00a 30901-01-07
 

Ermitazh

Новичок
[sql] SELECT a.`_id`, a.pn as p, a.name, a.`date`, a.`time`, TRIM(CONCAT(if(d.paddr='','',CONCAT(d.paddr, ', ')), d.pcity, ' ', if(d.pstate='','',CONCAT(d.pstate, ', ')) ,d.pzip, ' ',d.pcounty)), d.phone1 , TRIM(CONCAT(if(d.addr='','',CONCAT(d.addr, ', ')), d.city, ' ', if(d.state='','',CONCAT(d.state, ', ')),d.zip)) , CONCAT(a.pn,a.`date`) AS `pndate`, MIN(`_index9`) as `ind` FROM appoint AS a LEFT JOIN demo_demo AS d ON a.pn = d._pn WHERE a.`date` IS NOT null AND a.pn IS NOT null AND a.pn <> '' AND a._index10 >= '2007-01-01' AND a._index10 <= '2007-01-01' GROUP BY 'pndate' [/sql]

-~{}~ 29.08.07 13:45:

Limit и ордер тут конечно помогут...нужно в Selecte что то типа SUBSTR(GROUP_CONCAT( ... ) FROM 1 FOR 1) использовать...

-~{}~ 29.08.07 13:48:

Mr_Max
Нужно выбрать самые первые записи (где time самое минимальное) для каждого пациента в определённый промежуток времени.

-~{}~ 29.08.07 13:50:

[sql]MIN( `_index9` ) AS `ind`[/sql] Выбирает праильно но почему то group by вместе с этим не работает

-~{}~ 29.08.07 13:53:

_index9 состоит из номера пациента (pn )даты (date)и времени(time).
 

Фанат

oncle terrible
Команда форума
Ermitazh
а время уникальное?
если да, то почему бы не получать минй(тайм) и не джойнить по нему ту же таблицу?
то есть, не только по времени, но и по последнему полю - как оно там называется.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Выбирает праильно но почему то group by вместе с этим не работает
Не работает - не ответ.

Неправильно результат выдает?
 

Ermitazh

Новичок
работает совсем наоборот, в отдельной колонке то что было выбрано с помощью MIN('_index9') правильно отображается. А остальные записи например вместо

309 Kermit 01-01-07 08:00a 30901-01-07 показывает

309 Kermit 01-01-07 10:00a 30901-01-07
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Структуру таблицы в студию
 

Ermitazh

Новичок
группировка происходит.

Например имеем

id code

1 1
1 2
1 3

Group by id выдаст 1 3 а нужно 1 1
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Очень частто такое возникает из=за неправильного типа поля.

Наример, если стоит varchar вместо int сотировка будет типа
1
11
2
22

Вместо
1
2
11
33

SELECT *, CONCAT(`field_name`, 'а') as f FROM `a` ORDER BY f

11а

22а
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху