मैं सभी बिक्री को सूचीबद्ध करना चाहता हूं, और दिन के हिसाब से राशि जमा करता हूं।
Sales (saleID INT, amount INT, created DATETIME)
अद्यतन मैं SQL Server 2005 का उपयोग कर रहा हूँ
मैं सभी बिक्री को सूचीबद्ध करना चाहता हूं, और दिन के हिसाब से राशि जमा करता हूं।
Sales (saleID INT, amount INT, created DATETIME)
अद्यतन मैं SQL Server 2005 का उपयोग कर रहा हूँ
जवाबों:
यदि आप SQL सर्वर का उपयोग कर रहे हैं,
dateadd(DAY,0, datediff(day,0, created))
बनाया गया दिन वापस आएगा
उदाहरण के लिए, यदि बिक्री '2009-11-02 06: 12: 55.000' पर बनाई गई है, तो
dateadd(DAY,0, datediff(day,0, created))
'2009-11-02 00: 00: 00: 00) वापस करें।
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))
SQL सर्वर के लिए:
GROUP BY datepart(year,datefield),
datepart(month,datefield),
datepart(day,datefield)
या तेज (क्यू 8-कोडर से):
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)
यदि आप 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)
वास्तव में यह इस बात पर निर्भर करता है कि आप किस DBMS का उपयोग कर रहे हैं, लेकिन नियमित SQL convert(varchar,DateColumn,101)
में DATETIME प्रारूप को तिथि (एक दिन) में बदल देगा
इसलिए:
SELECT
sum(amount)
FROM
sales
GROUP BY
convert(varchar,created,101)
Magix नंबर 101
वह दिनांक स्वरूप है जिसे इसे में कनवर्ट किया जाता है
यदि आप SQL सर्वर का उपयोग कर रहे हैं, तो आप अपनी तालिका में तीन परिकलित फ़ील्ड जोड़ सकते हैं:
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
और अब आप आसानी से दिन, महीने या बिक्री के वर्ष के आधार पर ऑर्डर कर सकते हैं:
SELECT SaleDay, SUM(Amount)
FROM dbo.Sales
GROUP BY SaleDay
उन गणना किए गए फ़ील्ड को हमेशा अद्यतित रखा जाएगा (जब आपकी "निर्मित" तिथि में परिवर्तन होता है), वे आपकी तालिका का हिस्सा होते हैं, उन्हें नियमित फ़ील्ड की तरह उपयोग किया जा सकता है, और यहां तक कि अनुक्रमित भी किया जा सकता है (यदि वे "निजीकृत" हैं ) - महान सुविधा जो पूरी तरह से अप्रयुक्त है, IMHO।
न घुलनेवाली तलछट
Oracle के लिए आप कर सकते हैं
group by trunc(created);
चूंकि यह पिछली आधी रात को बनाए गए डेटाइम को काट देता है।
एक और विकल्प है
group by to_char(created, 'DD.MM.YYYY');
जो एक ही परिणाम प्राप्त करता है, लेकिन यह एक प्रकार के रूपांतरण की आवश्यकता के रूप में धीमा हो सकता है।
PostgreSQL के लिए:
GROUP BY to_char(timestampfield, 'yyyy-mm-dd')
या कास्ट का उपयोग कर:
GROUP BY timestampfield::date
यदि आप गति चाहते हैं, तो दूसरे विकल्प का उपयोग करें और एक सूचकांक जोड़ें:
CREATE INDEX tablename_timestampfield_date_idx ON tablename(date(timestampfield));
linq का उपयोग करें
from c in Customers
group c by DbFunctions.TruncateTime(c.CreateTime) into date
orderby date.Key descending
select new
{
Value = date.Count().ToString(),
Name = date.Key.ToString().Substring(0, 10)
}