У меня есть таблица заказов, в которой я хотел бы проиндексировать первый второй третий заказ каждой компании... и т.д.
Пример таблицы:
|---------------------|--------------------------|
| company_id | created_at |
|---------------------|--------------------------|
| 1 | 2019-01-01 01:00:00 |
|---------------------|--------------------------|
| 1 | 2019-02-01 01:00:00 |
|---------------------|--------------------------|
| 2 | 2019-03-01 02:00:00 |
|---------------------|--------------------------|
| 3 | 2019-03-01 08:30:00 |
|---------------------|--------------------------|
| 2 | 2019-03-01 10:00:00 |
|---------------------|--------------------------|
Я бы спросил, как это в конце. но я не уверен, как..... я продолжаю возвращаться к подсчету и группировке полей, но я не могу получить сумму для каждой строки на основе метки времени
|---------------------|--------------------------|-------|
| company_id | created_at |count()|
|---------------------|--------------------------|--------
| 1 | 2019-01-01 01:00:00 | 1 |
|---------------------|--------------------------|--------
| 1 | 2019-02-01 01:00:00 | 2 |
|---------------------|--------------------------|--------
| 2 | 2019-03-01 02:00:00 | 1 |
|---------------------|--------------------------|--------
| 3 | 2019-03-01 08:30:00 | 1 |
|---------------------|--------------------------|--------
| 2 | 2019-03-01 10:00:00 | 2 |
|---------------------|--------------------------|--------






SELECT
@row_number:=CASE
WHEN @company_id = company_id THEN @row_number + 1
ELSE 1
END AS count1,
@company_id:=company_id as company_id,
created_at
FROM
Table1,(SELECT @company_id:=0,@row_number:=0) as t
ORDER BY company_id;
как на самом деле работает @row_number? я не знаком с использованием @ в sql
Наоми: вы инициализируете переменную @row_number с 0, чтобы начать считать для company_id. Просто говорю: ваш ответный запрос (на тот же вопрос) займет больше времени.
Я считаю, что вы правы насчет трудоемкой части. по мере того, как моя таблица заказов увеличивается в размере, я буду облажаться с моим запросом.
В конце концов мое решение было таким, как показано ниже, что кажется более простым, чем было предложено выше.
SELECT company_id
,(
SELECT count(*) + 1
FROM ORDERS AS orderCount
WHERE orderCount.company_id = orders.company_id
AND orderCount.created_at < orders.created_at
) AS order_count
FROM ORDERS
ORDER BY created_at
Возможный дубликат Номер строки на группу в mysql