awk '//{ORS=""} /<\/table>/{ORS=RS} 1' file
для каждой строки:
- , если
найден, набор Output Record Separator к пустой строке (""
), - , если
найден, восстановление ORS, - печать.
посмотрите этот демонстрация онлайн .
примечание, что это могло бы работать на Ваш образец, но очевидно не будет работать на весь table
элементы. см. , почему парсинг HTML с помощью regex является плохой практикой .
24
задан Ian 12 November 2014 в 04:15
поделиться
3 ответа
GROUP BY 1
Я никогда не знал, что GROUP BY поддерживает использование порядковых номеров, только ORDER BY. В любом случае, только MySQL поддерживает GROUP BY, не включая все столбцы без выполняемых с ними агрегатных функций. Порядковые номера не рекомендуются, потому что если они основаны на порядке SELECT - если это изменится, то изменится и ваш ORDER BY (или GROUP BY, если поддерживается).
Нет необходимости запускать GROUP BY
в содержимом, когда вы используете UNION
- UNION обеспечивает удаление дубликатов; UNION ALL
быстрее, потому что это не так - и в этом случае вам понадобится GROUP BY ...
Ваш запрос должен быть только таким:
SELECT a.id,
a.time
FROM dbo.TABLE_A a
UNION
SELECT b.id,
b.time
FROM dbo.TABLE_B b
20
ответ дан 28 November 2019 в 22:08
поделиться
Идентифицировать столбец легко:
SELECT *
FROM ( SELECT id,
time
FROM dbo.a
UNION
SELECT id,
time
FROM dbo.b
)
GROUP BY id
Но это не решает основную проблему этого запроса: что делать со значениями второго столбца после группировки по первому? Поскольку (что особенно важно!) Вы используете UNION
вместо UNION ALL
, у вас не будет полностью дублированных строк между двумя подтаблицами в объединении, но у вас все еще может быть несколько значений времени для одного значения идентификатора, и вы не даете намеков на то, что вы хотите сделать - min, max, avg, sum или что ?! Из-за этого механизм SQL должен выдать ошибку (хотя некоторые, такие как mysql, просто выбирают случайное значение из нескольких, я считаю, что sql-server лучше этого).
Так, например, измените первое в строке SELECT id, MAX (time)
и т.п.!
6
ответ дан 28 November 2019 в 22:08
поделиться
, вам необходимо создать псевдоним подзапроса. Таким образом, ваш оператор должен быть таким:
Select Z.id
From (
Select id, time
From dbo.tablea
Union All
Select id, time
From dbo.tableb
) As Z
Group By Z.id
92
ответ дан 28 November 2019 в 22:08
поделиться
Другие вопросы по тегам: Похожие вопросы: