Запрос SQL Группе днем

Если Вы действительно просто хотите, чтобы он работал как диалоговое окно установки, что относительно того, чтобы просто дать фокус кнопке "Next" OnLoad. Тот путь, если пользователь поражает Возврат, форму, отправляет и продвигается. Если они хотят возвратиться, они могут поразить Вкладку или нажать на кнопку.

117
задан Loofer 7 October 2015 в 14:54
поделиться

6 ответов

, если вы используете SQL Server,

dateadd (DAY, 0, datiff (day, 0, created)) вернет день создания

, например, если продажа создана '2009-11-02 06: 12: 55.000', dateadd (DAY, 0, dateiff (day, 0, created)) return '2009-11-02 00: 00: 00.000'

select sum(amount) as total, dateadd(DAY,0, datediff(day,0, created)) as created
from sales
group by dateadd(DAY,0, datediff(day,0, created))
146
ответ дан 24 November 2019 в 02:05
поделиться

Для SQL Server:

GROUP BY datepart(year,datefield), 
    datepart(month,datefield), 
    datepart(day,datefield)

или быстрее (из Q8-Coder):

GROUP BY dateadd(DAY,0, datediff(day,0, created))

Для MySQL:

GROUP BY year(datefield), month(datefield), day(datefield)

или лучше (от Джона Брайта):

GROUP BY date(datefield)

Для Oracle:

GROUP BY to_char(datefield, 'yyyy-mm-dd')

или быстрее (от IronGoofy):

GROUP BY trunc(created);

Для Informix (от Джонатана Леффлера):

GROUP BY date_column
GROUP BY EXTEND(datetime_column, YEAR TO DAY)
99
ответ дан 24 November 2019 в 02:05
поделиться

Если вы ' при использовании MySQL:

SELECT
    DATE(created) AS saledate,
    SUM(amount)
FROM
    Sales
GROUP BY
    saledate

Если вы используете MS SQL 2008:

SELECT
    CAST(created AS date) AS saledate,
    SUM(amount)
FROM
    Sales
GROUP BY
    CAST(created AS date)
37
ответ дан 24 November 2019 в 02:05
поделиться

на самом деле это зависит от того, какую СУБД вы используете, но в обычном SQL convert (varchar, DateColumn, 101) изменит формат DATETIME на дату (один день)

итак:

SELECT 
    sum(amount) 
FROM 
    sales 
GROUP BY 
    convert(varchar,created,101)

число magix 101 - это формат даты, в который он конвертируется

7
ответ дан 24 November 2019 в 02:05
поделиться

Для Oracle вы можете

group by trunc(created);

, так как это усекает созданное datetime до предыдущей полуночи.

Другой вариант -

group by to_char(created, 'DD.MM.YYYY');

, который дает тот же результат, но может быть медленнее, поскольку требует преобразования типа.

2
ответ дан 24 November 2019 в 02:05
поделиться

If you're using SQL Server, you could add three calculated fields to your table:

Sales (saleID INT, amount INT, created DATETIME)

ALTER TABLE dbo.Sales
  ADD SaleYear AS YEAR(Created) PERSISTED
ALTER TABLE dbo.Sales
  ADD SaleMonth AS MONTH(Created) PERSISTED
ALTER TABLE dbo.Sales
  ADD SaleDay AS DAY(Created) PERSISTED

and now you could easily group by, order by etc. by day, month or year of the sale:

SELECT SaleDay, SUM(Amount)
FROM dbo.Sales
GROUP BY SaleDay

Those calculated fields will always be kept up to date (when your "Created" date changes), they're part of your table, they can be used just like regular fields, and can even be indexed (if they're "PERSISTED") - great feature that's totally underused, IMHO.

Marc

6
ответ дан 24 November 2019 в 02:05
поделиться
Другие вопросы по тегам:

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