Справка SQL-запроса: выбор строк, которые появляются определенное количество раз

Вы можете передать JVM этому параметру

-Duser.timezone

Например,

-Duser.timezone=Europe/Sofia

, и это должно сделать трюк. Установка переменной окружения TZ также делает трюк в Linux.

5
задан Taryn 27 June 2013 в 14:00
поделиться

8 ответов

select dates 
  from table t 
 group by dates having count(dates) < k ;

Хотелось бы надеяться, это работает на Oracle. HTH

6
ответ дан 18 December 2019 в 06:52
поделиться

Используйте агрегат КОЛИЧЕСТВА:

SELECT Date
FROM SomeTable
GROUP BY Date
HAVING COUNT(*) < @k
3
ответ дан 18 December 2019 в 06:52
поделиться

пример

DECLARE @Max int
SELECT @Max =  5

SELECT t1.* 
FROM [MyTable] t1 
JOIN(
    SELECT [Date] 
    FROM [MyTable] 
    GROUP By [Date] 
    HAVING COUNT(*) < @Max
) t2 on t1.[Date]  = t2.[Date] 
2
ответ дан 18 December 2019 в 06:52
поделиться
SELECT * FROM [MyTable] WHERE [Date] IN
(
    SELECT [Date] 
    FROM [MyTable] 
    GROUP By [Date] 
    HAVING COUNT(*) < @Max
)

Посмотрите [SQLMenace] ответ также. Это очень похоже на это, но в зависимости от Вашей базы данных его СОЕДИНЕНИЕ будет, вероятно, работать быстрее, предполагая, что оптимизатор не имеет спорного значения.

8
ответ дан 18 December 2019 в 06:52
поделиться

Для "появляется, x времена" запросы лучше использовать пункт НАЛИЧИЯ. В Вашем случае запрос может быть похожим:

SELECT Date FROM table GROUP BY Date HAVING COUNT(*)<k

или, в Вас должен выбрать другие столбцы кроме Даты:

SELECT * FROM Table WHERE Date IN (
SELECT Date FROM table GROUP BY Date HAVING COUNT(*)<k)

Можно также переписать В к ВНУТРЕННЕМУ ОБЪЕДИНЕНИЮ, однако это не даст увеличение производительности, поскольку на самом деле оптимизатор запросов сделает это для Вас в большей части RDBMS. Наличие индекса в Дату, конечно, улучшит производительность для этого запроса.

2
ответ дан 18 December 2019 в 06:52
поделиться
SELECT date, COUNT(date)
FROM table
GROUP BY date
HAVING COUNT(date) < k

И затем вернуть исходные данные:

SELECT table.*
FROM table
INNER JOIN (
  SELECT date, COUNT(date) 
  FROM table
  GROUP BY date
  HAVING COUNT(date) < k) dates ON table.date = dates.date
1
ответ дан 18 December 2019 в 06:52
поделиться

Принятие Вас использует Oracle и k = 5:-

select date_col,count(*)
from your_table
group by date_col
having count(*) < 5;

Если Вашему столбцу даты заполнили время также, и Вы хотите проигнорировать его, изменить запрос, таким образом, это смотрит следующим образом:-

select trunc(date_col) as date_col,count(*)
from your_table
group by trunc(date_col)
having count(*) < 5;
1
ответ дан 18 December 2019 в 06:52
поделиться

Вы не можете рассчитывать непосредственно на datefield, если Ваши даты включают времена. Вы, возможно, должны преобразовать в просто формат года/месяца/дня сначала и затем провести подсчет на этом.

Иначе Ваши количества будут прочь как обычно существует очень немного записей с тем же самым временем.

0
ответ дан 18 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: