স্কুলে ক্লায়েন্ট করে দিন দিন Group


134

আমি সমস্ত বিক্রয় তালিকাবদ্ধ করতে চান, এবং যোগফল দিন।

Sales (saleID INT, amount INT, created DATETIME)

আপডেট আমি এসকিউএল সার্ভার 2005 ব্যবহার করছি


4
তারিখ ফাংশনগুলি তাদের এসকিউএল উপভাষায় আলাদা হওয়ায় আপনাকে কোন ডাটাবেস ব্যবহার করছেন তা নির্দিষ্ট করতে হবে।
গুফা

দিনের বেলা গ্রুপিংয়ের আরও তথ্যের জন্য এখানে দেখুন। sqlserverlearner.com/2012/group-by-day-with- উদাহরণ

উত্তর:


164

যদি আপনি এসকিউএল সার্ভার ব্যবহার করেন,

dateadd(DAY,0, datediff(day,0, created)) তৈরি দিন ফিরে আসবে

উদাহরণস্বরূপ, বিক্রয়'৯৯-১০-০২ 06: 12: 55.000 'এ তৈরি করা হলে, dateadd(DAY,0, datediff(day,0, created))' 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))

আপনার মাথার উপরের অংশটি ছেড়ে, এইভাবে ডিজাইন করা বা কেবলমাত্র তারিখ এবং সরাসরি এতে গ্রুপ ব্যবহার করা আরও কার্যকর হবে?
সিনাস্টেস্টিক

@ সিনেস্টেটিক যা প্রয়োজনীয়তার উপর নির্ভর করে।
আনোয়ার চন্দ্র

108

এসকিউএল সার্ভারের জন্য:

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

বা দ্রুত (Q8-কোডার থেকে):

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

মাইএসকিউএল এর জন্য:

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

বা আরও ভাল (জন ব্রাইট থেকে):

GROUP BY date(datefield)

ওরাকল এর জন্য:

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

বা দ্রুত (আয়রনগোফি থেকে):

GROUP BY trunc(created);

ইনফর্মিক্সের জন্য (জোনাথন লেফলার লিখেছেন):

GROUP BY date_column
GROUP BY EXTEND(datetime_column, YEAR TO DAY)

সমস্ত ভিন্ন
বাক্য গঠনের

43

আপনি যদি মাইএসকিউএল ব্যবহার করেন:

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

আপনি যদি এমএস এসকিউএল ২০০৮ ব্যবহার করেন:

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

5
আমি ভয় পাচ্ছি যে এই উদাহরণগুলি মাইক্রোসেকেন্ড অনুসারে ভাগ হবে
অ্যান্ডোমার

আন্দোমার, আমি কেবল এমএস এসকিউএল এক চেষ্টা করেছি (সিনট্যাক্সটিতে একটি ছোটখাটো ঝাঁকুনির পরে)। এটি সুখে এখানে তারিখ অনুসারে গ্রুপ। আমার কাছে যেতে এবং মাইএসকিউএল করার চেষ্টা করার মতো সময় নেই, তবে আমি এটি আমার দিনের চাকরিতে সারা দিন ব্যবহার করি এবং আমি কম-বেশি নিশ্চিত যে এটি তারিখ অনুসারে গ্রুপেও চলেছে।
জন ব্রাইট

@ জোন ব্রাইট: আমার মন্তব্যটি সম্পাদনার আগে ছিল। বর্তমানের একটি এখনও ভুল: তারিখের প্রকারটি কেবলমাত্র এসকিউএল সার্ভার ২০০৮
অ্যান্ডোমার

আন্দোমার, যেহেতু আপনি আমাকে অনিশ্চিত করে দিয়েছিলেন, আমি সবেমাত্র এসেছি এবং মাইএসকিউএলও পরীক্ষা করেছি। এটি সঠিকভাবে কাজ করে এবং তারিখ অনুসারে গ্রুপ করে groups
জন ব্রাইট

আন্দোমার, সম্পাদনাটি ফলাফলের সাথে শূন্য কার্যকরী পার্থক্য তৈরি করেছে, কমপক্ষে তারিখ বা মাইক্রোসেকেন্ডগুলিতে গ্রুপিংয়ের উদ্বেগ হিসাবে। যদি কেবল ২০০৮ তারিখের সময়টিকে সমর্থন করে (আমি তাকাইনি), তবে উত্তরটি ভুল করে না, এটি কেবল এমএস এসকিউএল ২০০৮ এ প্রয়োগ করে। সেখানে একটি পার্থক্য রয়েছে।
জন ব্রাইট

7

আসলে এটি আপনি যে ডিবিএমএস ব্যবহার করছেন তার উপর নির্ভর করে তবে নিয়মিত এসকিউএলে convert(varchar,DateColumn,101)DATETIME ফর্ম্যাটটি তারিখের (একদিন) পরিবর্তন করবে

তাই:

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

চৌম্বক সংখ্যাটি 101রূপান্তরিত হওয়ার তারিখের ফর্ম্যাট


2
+1 হ্যাঁ, এটি 101 এর অর্থ কী তা এখানে ব্যাখ্যা করা হয়েছে msdn.microsoft.com/en-us/library/ms187928.aspx
Andomar

7

আপনি যদি এসকিউএল সার্ভার ব্যবহার করেন তবে আপনি আপনার টেবিলটিতে তিনটি গণনা করা ক্ষেত্র যুক্ত করতে পারেন:

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

এই গণনা করা ক্ষেত্রগুলি সর্বদা আপ টু ডেট থাকবে (যখন আপনার "তৈরি" তারিখ পরিবর্তন হয়), সেগুলি আপনার টেবিলের অংশ, এগুলি কেবল নিয়মিত ক্ষেত্রের মতো ব্যবহার করা যেতে পারে এবং এমনকি সূচিওযুক্ত করা যেতে পারে (যদি তারা "নিখরচায় থাকে" ) - আইএমএইচও, সম্পূর্ণরূপে নিখরচায় দুর্দান্ত বৈশিষ্ট্য।

আঙ্গুরের ছিরড়া


হ্যাঁ! আপনার যদি প্রয়োজন হয় পুরো দিন, মাস, বছর সব সময় রিপোর্ট করা :-)
marc_s

2

ওরাকল জন্য আপনি পারেন

group by trunc(created);

যেহেতু এটি তৈরি করা ডেটটাইমটিকে আগের মধ্যরাতে ছাঁটাই করে।

আরেকটি বিকল্প হল

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

যা একই ফলাফল অর্জন করে তবে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ঘোঁড়্টুফোঁপি) একইরকম ফলাফল অর্জন করে তবে ধীর হতে পারে কারণ এটির জন্য ধরণের রূপান্তর প্রয়োজন it


এটি সম্ভবত বেশ ওরাকল-নির্দিষ্ট, তবে বেশ সহজ। খুব দ্রুত আপনাকে মাসের প্রথম দিন ইত্যাদি দেওয়ার জন্য একটি ট্রাঙ্ক (..., 'মাস') রয়েছে
থারস্টেন

2

PostgreSQL এর জন্য:

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

বা castালাই ব্যবহার:

GROUP BY timestampfield::date

আপনি যদি গতি চান, দ্বিতীয় বিকল্পটি ব্যবহার করুন এবং একটি সূচক যুক্ত করুন:

CREATE INDEX tablename_timestampfield_date_idx ON  tablename(date(timestampfield));

-3

লিনক ব্যবহার করুন

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)
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.