Вы можете передать JVM этому параметру
-Duser.timezone
Например,
-Duser.timezone=Europe/Sofia
, и это должно сделать трюк. Установка переменной окружения TZ также делает трюк в Linux.
select dates
from table t
group by dates having count(dates) < k ;
Хотелось бы надеяться, это работает на Oracle. HTH
Используйте агрегат КОЛИЧЕСТВА:
SELECT Date
FROM SomeTable
GROUP BY Date
HAVING COUNT(*) < @k
пример
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]
SELECT * FROM [MyTable] WHERE [Date] IN
(
SELECT [Date]
FROM [MyTable]
GROUP By [Date]
HAVING COUNT(*) < @Max
)
Посмотрите [SQLMenace] ответ также. Это очень похоже на это, но в зависимости от Вашей базы данных его СОЕДИНЕНИЕ будет, вероятно, работать быстрее, предполагая, что оптимизатор не имеет спорного значения.
Для "появляется, 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. Наличие индекса в Дату, конечно, улучшит производительность для этого запроса.
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
Принятие Вас использует 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;
Вы не можете рассчитывать непосредственно на datefield, если Ваши даты включают времена. Вы, возможно, должны преобразовать в просто формат года/месяца/дня сначала и затем провести подсчет на этом.
Иначе Ваши количества будут прочь как обычно существует очень немного записей с тем же самым временем.