Как получить номера строк и выбрать конкретную строку, используя mySQL в GCP? - PullRequest
0 голосов
/ 06 февраля 2019

Я использую Google Cloud Platform с mySQL.

У меня есть таблица с 3 столбцами:

idUser, Name, timestamp
me@you.com, Mike Jones, 1-6-1900 05:00
us@we.com, Steve Brown, 1-2-1900 06:00
jsmith@email.com, John Smith, 1-5-1900 06:00
test@me.com, Sarah Lee, 1-3-1900 05:30

Я хочу сделать запрос, на котором я могу сказать "найти номер строки"jsmith@email.com находится в ", основываясь на метке времени как порядок / сортировка.

Мне удалось заставить его часть работать, я могу сгенерировать некоторые результаты, показывающие номера строк на основе метки времени:

SET @row_number:=0;
SELECT @row_number:=@row_number+1 AS row_number,idUser FROM SpeakerQueueActive
ORDER BY timestamp 

Это дает мне результаты с добавленными номерами строк:

row_num, idUser, Name, timestamp
1,us@we.com, Steve Brown, 1-2-1900 06:00
2,test@me.com, Sarah Lee, 1-3-1900 05:30
3,jsmith@email.com, John Smith, 1-5-1900 06:00
4,me@you.com, Mike Jones, 1-6-1900 05:00

Я думаю, я бы сейчас хотел сделать это вложенным и использовать что-то вроде:

SELECT * from
(SET @row_number:=0;
SELECT @row_number:=@row_number+1 AS row_number,idUser FROM SpeakerQueueActive
ORDER BY timestamp)
WHERE idUser = 'jsmith@email.com'

Но я получаю ошибку, что синтаксис неправильный.Я также попытался сделать первый блок кода хранимой процедурой, а затем вызвать его, но я не могу использовать его и с SELECT.

Итак, вернемся к моему первоначальному вопросу.сообщите мне, что он в ряду № 3

Как я могу это сделать?Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019
SELECT * from
(SET @row_number:=0;
SELECT @row_number:=@row_number+1 AS row_number,idUser FROM SpeakerQueueActive
ORDER BY timestamp)
WHERE idUser = 'jsmith@email.com'

Нужно переписать в

SELECT * from (
   SELECT @row_number:=@row_number+1 AS row_number,idUser FROM SpeakerQueueActive
   CROSS JOIN (SELECT @row_number:= 0) AS init
ORDER BY timestamp) AS alias 
WHERE idUser = 'jsmith@email.com'

Или как CROSS JOIN на основе запятой.

SELECT * from (
      SELECT @row_number:=@row_number+1 AS row_number,idUser FROM SpeakerQueueActive
    , (SELECT @row_number:= 0) AS init
ORDER BY timestamp) AS alias 
WHERE idUser = 'jsmith@email.com'
0 голосов
/ 06 февраля 2019

Вам нужно псевдоним таблицы FROM ( ) t

SET @row_number:=0;
SELECT t.* from   (
SELECT @row_number:=@row_number+1 AS row_number,idUser FROM SpeakerQueueActive
ORDER BY timestamp) t  /* here add the table name alias */
WHERE t.idUser = 'jsmith@email.com'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...