SQL SELECT DISTINCT ID из копий ORDER BY CID - PullRequest
1 голос
/ 25 августа 2009

я хочу что-то вроде этого:

SELECT DISTINCT ID from copies WHERE timestamp < 1229444506 ORDER BY CID 

проблема в том, что этот единственный возвращаемый идентификатор, и мне нужны CID и другие столбцы в таблице.

Может быть, это совершенно неправильно и по другой причине, поэтому я объясню, что мне нужно.

У меня есть таблица, которая "записывает" каждое изменение строки в моем maintable. Это так, что в будущем я смогу вернуться во времени и посмотреть, как основная таблица выглядела как определенная дата во времени.

Итак, мне нужен запрос, который ЗАКАЗЫВАЕТ все строки по CID, WHERE timestamp

Я хочу, чтобы запрос возвращал первую строку по идентификатору, когда CID заказывает самое новое сначала.

Я пытался заставить это работать разными методами, но безуспешно. Есть предложения?

Ответы [ 3 ]

2 голосов
/ 25 августа 2009

Я не уверен, правильно ли я понял, но как насчет создания подзапроса, который будет просто выбирать столбцы? Вы написали: «Я хочу, чтобы запрос возвращал первую строку по идентификатору, когда CID заказывает самое новое сначала».

Итак, давайте сделаем подзапрос:

SELECT id, max(cid) as maxcid FROM copies WHERE timestamp < XX group by id

Это даст вам идентификатор отношения <=> CID, который вы хотите. А теперь присоединяйтесь:

SELECT copies.* FROM copies, (SELECT id, max(cid) as maxcid FROM copies WHERE timestamp < xxx group by id) x  
WHERE copies.id=x.id AND copies.cid=x.maxcid;
0 голосов
/ 25 августа 2009

как ваша база данных может узнать, какие строки добавить в ваш отдельный столбец? скажи, что у тебя есть

 id | name
 ---+-----
  1 | a
  1 | b

Теперь гипотетический запрос: SELECT DISTINCT id, name FROM table. какое имя вы ожидаете увидеть в своем результате? а или б?

если это не проблема, вы можете сгруппировать свой результат в mysql по id, но неизвестно, какое имя вы получите

SELECT `id`, `name` FROM `copies` WHERE `timestamp` > 123456789 GROUP BY `id` ORDER BY `cid` DESC
0 голосов
/ 25 августа 2009
SELECT * FROM copies WHERE timestamp < 1229444506 GROUP BY ID ORDER BY CID DESC;

EDIT

SELECT * FROM copies WHERE timestamp < 1229444506 GROUP BY ID ORDER BY CID;

Вы также можете попробовать:

SELECT * FROM copies WHERE timestamp < 1229444506 GROUP BY ID ASC ORDER BY CID;

Или:

SELECT * FROM copies WHERE timestamp < 1229444506 GROUP BY ID DESC ORDER BY CID;

Это работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...