একাধিক কলামের এসকিউএল ম্যাক্স?


372

আপনি কতগুলি কলামের সর্বাধিক প্রতি সারি 1 মান ফেরত পাবেন:

tablename

[Number, Date1, Date2, Date3, Cost]

আমাকে এরকম কিছু ফিরিয়ে দিতে হবে:

[Number, Most_Recent_Date, Cost]

প্রশ্ন?

উত্তর:


161

ভাল, আপনি CASE বিবৃতি ব্যবহার করতে পারেন:

SELECT
    CASE
        WHEN Date1 >= Date2 AND Date1 >= Date3 THEN Date1
        WHEN Date2 >= Date1 AND Date2 >= Date3 THEN Date2
        WHEN Date3 >= Date1 AND Date3 >= Date2 THEN Date3
        ELSE                                        Date1
    END AS MostRecentDate

[মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০৮ এবং তারপরের জন্য, আপনি নীচে সোভেনের সহজ উত্তরটি বিবেচনা করতে পারেন]]


11
এটি কি যথেষ্ট হবে না WHEN Date1 > Date2 AND Date1 > Date3 THEN Date1; WHEN Date2 > Date3 THEN Date3; ELSE Date3?
ট্রব

21
সুস্পষ্ট উত্তর, কিন্তু এটি ন্যূনাল মানগুলির সাথে কাজ করে না এবং এটি খুব অগোছালো হয়ে যায় তা ঠিক করার চেষ্টা করে।
বিভ্রান্ত

5
এই পুরানো পোস্টটি নেক্রো'ইং করছে, তবে আপনি প্রতিটি তারিখ নুলের পরিচালনা করতে একটি COALESCE এ মোড়ানো করতে পারেন। তারপরে WHEN বিবৃতিগুলির মধ্যে একটির মতো দেখতে পাওয়া যাবে: WHEN তারিখ 1> = COALESCE (তারিখ 2, '') এবং তারিখ 1> = কোলেসেস (তারিখ 3, '') তৃতীয় তারিখ 3 (অন্যের ক্ষেত্রে একই কাজ করুন)
বিল স্যামব্রোন

: যারা এখানে এসেছে একটি মাইএসকিউএল পথ খুঁজছেন জন্য, @ bajafresh4life উত্তর কটাক্ষপাত stackoverflow.com/a/331873/1412157
LucaM

2
বিটিডাব্লু, এটি তারিখ 1 প্রদান করে যখন ডেট 2 নਾਲ হয় এমনকি তারিখ 3> তারিখ 1 থাকে।
jumxozizi

853

Maxটি-এসকিউএল এবং এসকিউএল সার্ভার ব্যবহার করে কার্যকারিতাটির জন্য আরও একটি দুর্দান্ত সমাধান এখানে

SELECT [Other Fields],
  (SELECT Max(v) 
   FROM (VALUES (date1), (date2), (date3),...) AS value(v)) as [MaxDate]
FROM [YourTableName]

47
এসকিউএল সংস্করণ অবশ্যই> = ২০০৮
ড্যানিয়েল

10
এটি 2008 এর সাথে খুব ভালভাবে কাজ করে এবং NULL পরিচালনা করে। খুব সুন্দর সমাধান।
নাইডদান

10
@ শেবাউরেক: মান থেকে (v), "মান" হ'ল ভার্চুয়াল টেবিলের জন্য নাম এবং "ভি" হ'ল তারিখের মানগুলির ভার্চুয়াল কলামের নাম।
জোনাস লিংকন

2
ইহা অসাধারণ. আমি এই মান () ভার্চুয়াল টেবিলের জন্য ডকুমেন্টেশন কোথায় পেতে পারি?
আমার অন্য আমাকে

33
আমি প্রথমে ভ্যালু (v) বুঝতে পারি নি। আপনি যদি ভ্যালু বুঝতে চান তবে এই ক্যোয়ারীটি চেষ্টা করুন যা ভার্চুয়াল 1 কলামের টেবিল তৈরি করে: তালিকা থেকে ওয়ালভিউস (কলামনাম) হিসাবে * (ভ্যালু (1), (5), (1)) নির্বাচন করুন এবং এই কোয়েরি যা ভার্চুয়াল 2 কলামের সারণি তৈরি করে: টেবিলঅফভ্যালিউস (কলামনাম 1, কলামনাম 2) হিসাবে * (VALUES (1,2), (5,3), (1,4%) নির্বাচন করুন * এখন আপনি বুঝতে পারবেন যে সেই নমুনা ক্যোয়ারীর কেন এ (AS) মান আছে (ভি)। আমার চূড়ান্ত ক্যোয়ারীটি এরকম দেখাচ্ছে: সিক্সট ম্যাক্স (কারেন্টভ্যালুগুলি) সর্বাধিক স্রোত হিসাবে (ভ্যালিউস (12), (25), (35%) হিসাবে সর্বাধিক (বর্তমানের মান) এটি সর্বাধিক মানটি বেছে নেবে যা এই ক্ষেত্রে 35।
জ্যাকসন

148

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

SELECT GREATEST(col1, col2 ...) FROM table

41
ট্যাগটি স্কেলসার্ভার
কোডওয়ার্কস

104
সত্য, তবে এখনও মাইএসকিউএল সম্পর্কিত রেফারেন্স হিসাবে লোকেরা এই প্রশ্নটি খুঁজে পাওয়ায় এটি একটি খুব সহায়ক উত্তর।
ফিলিফ্রিও

4
পোস্টগ্রিজ এসকিউএলে 8.1 থেকে পাওয়া যায় ।
হিমায়িত শিখা

4
NULL এর ভাল পরিচালনা করে না, তবে যদি আপনি আপনার কলামের মানগুলি (কোল 1, 0) একত্রিত করেন তবে আপনি গ্যাসের সাথে রান্না করছেন এই উত্তরটি দেখুন stackoverflow.com/questions/9831851/…
স্ট্যান কুইন

এবং এই সমাধান সম্পর্কে কী: স্ট্যাকওভারফ্লো.com
স্যান্ডবুর্গ 11'19

64

আরও 3 টি পদ্ধতি রয়েছে যেখানে UNPIVOT(1) এখন পর্যন্ত সবচেয়ে দ্রুত, সিমুলেটেড আনপাইভট (3) অনুসরণ করে যা (1) এর চেয়ে অনেক ধীর হলেও এখনও (2) এর চেয়ে দ্রুত

CREATE TABLE dates
    (
      number INT PRIMARY KEY ,
      date1 DATETIME ,
      date2 DATETIME ,
      date3 DATETIME ,
      cost INT
    )

INSERT  INTO dates
VALUES  ( 1, '1/1/2008', '2/4/2008', '3/1/2008', 10 )
INSERT  INTO dates
VALUES  ( 2, '1/2/2008', '2/3/2008', '3/3/2008', 20 )
INSERT  INTO dates
VALUES  ( 3, '1/3/2008', '2/2/2008', '3/2/2008', 30 )
INSERT  INTO dates
VALUES  ( 4, '1/4/2008', '2/1/2008', '3/4/2008', 40 )
GO

সমাধান 1 ( UNPIVOT)

SELECT  number ,
        MAX(dDate) maxDate ,
        cost
FROM    dates UNPIVOT ( dDate FOR nDate IN ( Date1, Date2,
                                            Date3 ) ) as u
GROUP BY number ,
        cost 
GO

সমাধান 2 (প্রতি সারি সাব কোয়েরি)

SELECT  number ,
        ( SELECT    MAX(dDate) maxDate
          FROM      ( SELECT    d.date1 AS dDate
                      UNION
                      SELECT    d.date2
                      UNION
                      SELECT    d.date3
                    ) a
        ) MaxDate ,
        Cost
FROM    dates d
GO

সমাধান 3 (সিমুলেটেড UNPIVOT)

;WITH    maxD
          AS ( SELECT   number ,
                        MAX(CASE rn
                              WHEN 1 THEN Date1
                              WHEN 2 THEN date2
                              ELSE date3
                            END) AS maxDate
               FROM     dates a
                        CROSS JOIN ( SELECT 1 AS rn
                                     UNION
                                     SELECT 2
                                     UNION
                                     SELECT 3
                                   ) b
               GROUP BY Number
             )
    SELECT  dates.number ,
            maxD.maxDate ,
            dates.cost
    FROM    dates
            INNER JOIN MaxD ON dates.number = maxD.number
GO

DROP TABLE dates
GO

1
খুশী হলাম। আমি পাইভট এবং ইউএনপিআইভিটি অপারেটরদের সম্পর্কে অসচেতন ছিলাম।
সাকো 73

কোন ধারণা এসকিউএল সার্ভারের সংস্করণগুলি পিভট / আনপিবটকে সমর্থন করে?
বিভ্রান্ত


18

নীচের দুটি নমুনার যে কোনওটিই কাজ করবে:

SELECT  MAX(date_columns) AS max_date
FROM    ( (SELECT   date1 AS date_columns
           FROM     data_table         )
          UNION
          ( SELECT  date2 AS date_columns
            FROM    data_table
          )
          UNION
          ( SELECT  date3 AS date_columns
            FROM    data_table
          )
        ) AS date_query

দ্বিতীয়টি লাসসেভকের উত্তরের একটি অ্যাড-অন ।

SELECT  MAX(MostRecentDate)
FROM    ( SELECT    CASE WHEN date1 >= date2
                              AND date1 >= date3 THEN date1
                         WHEN date2 >= date1
                              AND date2 >= date3 THEN date2
                         WHEN date3 >= date1
                              AND date3 >= date2 THEN date3
                         ELSE date1
                    END AS MostRecentDate
          FROM      data_table
        ) AS date_query 

প্রথম উত্তরটি ভাল, তবে উল্লেখযোগ্যভাবে সরল করা যেতে পারে। দ্বিতীয় উত্তর NULL মানগুলির সাথে কাজ করে না। সমস্যাটি ঠিক করার চেষ্টা করা খুব অগোছালো হয়ে যায়।
বিভ্রান্ত

অপ্রয়োজনীয় নির্ধারিত DISTINCT অপারেশনটি এড়ানোর জন্য আপনার ইউনিয়ন সমস্ত নয়, ইউনিয়ন ব্যবহার করা উচিত।
জ্যামিসি

17

টি-এসকিউএল (এমএসএসকিউএল ২০০৮+) এর জন্য

SELECT
  (SELECT
     MAX(MyMaxName) 
   FROM ( VALUES 
            (MAX(Field1)), 
            (MAX(Field2)) 
        ) MyAlias(MyMaxName)
  ) 
FROM MyTable1

9
DECLARE @TableName TABLE (Number INT, Date1 DATETIME, Date2 DATETIME, Date3 DATETIME, Cost MONEY)

INSERT INTO @TableName 
SELECT 1, '20000101', '20010101','20020101',100 UNION ALL
SELECT 2, '20000101', '19900101','19980101',99 

SELECT Number,
       Cost  ,
       (SELECT MAX([Date])
       FROM    (SELECT Date1 AS [Date]
               UNION ALL
               SELECT Date2
               UNION ALL
               SELECT Date3
               )
               D
       )
       [Most Recent Date]
FROM   @TableName

আমার জন্য যে কোনও এসকিউএল সংস্করণে কাজ করেছেন, দুর্দান্ত সমাধান
কিরিল

9

স্কেলার ফাংশন সমস্ত ধরণের পারফরম্যান্স সমস্যার কারণ হয়ে থাকে, সুতরাং যদি সম্ভব হয় তবে যুক্তিকে একটি ইনলাইন টেবিলের মূল্যবান ফাংশনে আবদ্ধ করা আরও ভাল। এটি আমি ব্যবহারকারীর সংজ্ঞায়িত ফাংশনগুলি প্রতিস্থাপন করতে ব্যবহৃত ফাংশন যা দশ তারিখের তালিকা থেকে ন্যূনতম / ম্যাক্স তারিখগুলি নির্বাচন করে। যখন আমার 1 মিলিয়ন সারিগুলির ডেটাসেটে পরীক্ষা করা হয়েছে তখন স্কেলার ফাংশনটি জিজ্ঞাসাটি মেরে ফেলার 15 মিনিটেরও বেশি সময় লেগেছিল ইনলাইন টিভিএফ 1 মিনিট সময় নিয়েছিল যা অস্থায়ী সারণীতে ফলাফল সেট নির্বাচন করার সময় একই পরিমাণ of এই কলটি নির্বাচন করতে হয় নির্বাচন করুন নির্বাচন করুন বা একটি ক্রস প্রয়োগের একটি subquery থেকে হয়।

CREATE FUNCTION dbo.Get_Min_Max_Date
(
    @Date1  datetime,
    @Date2  datetime,
    @Date3  datetime,
    @Date4  datetime,
    @Date5  datetime,
    @Date6  datetime,
    @Date7  datetime,
    @Date8  datetime,
    @Date9  datetime,
    @Date10 datetime
)
RETURNS TABLE
AS
RETURN
(
    SELECT      Max(DateValue)  Max_Date,
                Min(DateValue)  Min_Date
    FROM        (
                    VALUES  (@Date1),
                            (@Date2),
                            (@Date3),
                            (@Date4),
                            (@Date5),
                            (@Date6),
                            (@Date7),
                            (@Date8),
                            (@Date9),
                            (@Date10)
                )   AS Dates(DateValue)
)

5
SELECT 
    CASE 
        WHEN Date1 >= Date2 AND Date1 >= Date3 THEN Date1 
        WHEN Date2 >= Date3 THEN Date2 
        ELSE Date3
    END AS MostRecentDate 

এটি লেখার পক্ষে সামান্য সহজ এবং কেস স্টেটমেন্টটি ক্রমে মূল্যায়ন করা হয় বলে মূল্যায়নের পদক্ষেপগুলি এড়িয়ে যায়।


4
সাবধান হন। তারিখ 2 যদি নুল হয় তবে উত্তরটি তারিখ 3 হবে; এমনকি ডেট 1 বড় হলেও।
বিভ্রান্ত

4

দুর্ভাগ্যক্রমে লাসের উত্তরটি যদিও আপাতদৃষ্টিতে সুস্পষ্ট বলে মনে হচ্ছে তবে এর একটি গুরুত্বপূর্ণ ত্রুটি রয়েছে। এটি নুল মানগুলি পরিচালনা করতে পারে না। তারিখ 1-এ কোনও একক নূন্যমূল্যের ফলাফল ফেরত দেওয়া হচ্ছে। দুর্ভাগ্যক্রমে যে সমস্যাটি সমাধান করার কোনও প্রচেষ্টা চরম অগোছালো হয়ে যায় এবং 4 বা ততোধিক মানকে খুব সুন্দর করে স্কেল করে না।

ডাটাবাইসের প্রথম উত্তর দেখতে ভাল (এবং হ'ল)। তবে, কোনও একক টেবিল থেকে সহজ 3 টি মানের পরিবর্তে উত্তরটি কোনও বহু-টেবিল জোড়ায় 3 মানগুলিতে সহজেই এক্সট্রাপোল্ট হবে কিনা তা পরিষ্কার ছিল না। সর্বাধিক 3 টি কলামের জন্য আমি এই জাতীয় কোয়েরিকে একটি সাব-কোয়েরিতে পরিণত করা এড়াতে চেয়েছিলাম, এছাড়াও আমি নিশ্চিত যে ডাটাবাইসের দুর্দান্ত ধারণাটি কিছুটা সাফ করা যায়।

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

DECLARE @v1 INT ,
        @v2 INT ,
        @v3 INT
--SET @v1 = 1 --Comment out SET statements to experiment with 
              --various combinations of NULL values
SET @v2 = 2
SET @v3 = 3

SELECT  ( SELECT    MAX(Vals)
          FROM      ( SELECT    v1 AS Vals
                      UNION
                      SELECT    v2
                      UNION
                      SELECT    v3
                    ) tmp
          WHERE     Vals IS NOT NULL -- This eliminates NULL warning

        ) AS MaxVal
FROM    ( SELECT    @v1 AS v1
        ) t1
        CROSS JOIN ( SELECT @v2 AS v2
                   ) t2
        CROSS JOIN ( SELECT @v3 AS v3
                   ) t3

4

সমস্যা: কোনও সত্তার প্রয়োজনীয়তাকে দেওয়া সর্বনিম্ন হারের মানটি চয়ন করুন: এজেন্সির হারগুলি শূন্য হতে পারে

[MinRateValue] = 
CASE 
   WHEN ISNULL(FitchRating.RatingValue, 100) < = ISNULL(MoodyRating.RatingValue, 99) 
   AND  ISNULL(FitchRating.RatingValue, 100) < = ISNULL(StandardPoorsRating.RatingValue, 99) 
   THEN FitchgAgency.RatingAgencyName

   WHEN ISNULL(MoodyRating.RatingValue, 100) < = ISNULL(StandardPoorsRating.RatingValue , 99)
   THEN MoodyAgency.RatingAgencyName

   ELSE ISNULL(StandardPoorsRating.RatingValue, 'N/A') 
END 

নাট থেকে এই উত্তর দ্বারা অনুপ্রাণিত


3

আপনি যদি এসকিউএল সার্ভার 2005 ব্যবহার করেন তবে আপনি ইউএনপিভোট বৈশিষ্ট্যটি ব্যবহার করতে পারেন। এখানে একটি সম্পূর্ণ উদাহরণ:

create table dates 
(
  number int,
  date1 datetime,
  date2 datetime,
  date3 datetime 
)

insert into dates values (1, '1/1/2008', '2/4/2008', '3/1/2008')
insert into dates values (1, '1/2/2008', '2/3/2008', '3/3/2008')
insert into dates values (1, '1/3/2008', '2/2/2008', '3/2/2008')
insert into dates values (1, '1/4/2008', '2/1/2008', '3/4/2008')

select max(dateMaxes)
from (
  select 
    (select max(date1) from dates) date1max, 
    (select max(date2) from dates) date2max,
    (select max(date3) from dates) date3max
) myTable
unpivot (dateMaxes For fieldName In (date1max, date2max, date3max)) as tblPivot

drop table dates

1
আমি মনে করি আমি ইউনিয়ন উদাহরণটি আরও ভাল পছন্দ করি।
ল্যান্স ফিশার 19

"আপনি কীভাবে বেশ কয়েকটি কলামের সর্বাধিক এক
মান PEROW ফেরান

3

ক্রস প্রয়োগ করুন (2005+ এর জন্য) ....

SELECT MostRecentDate 
FROM SourceTable
    CROSS APPLY (SELECT MAX(d) MostRecentDate FROM (VALUES (Date1), (Date2), (Date3)) AS a(d)) md

3

এসকিউএল সার্ভার থেকে 2012 আমরা আইআইএফ ব্যবহার করতে পারি ।

 DECLARE @Date1 DATE='2014-07-03';
 DECLARE @Date2 DATE='2014-07-04';
 DECLARE @Date3 DATE='2014-07-05';

 SELECT IIF(@Date1>@Date2,
        IIF(@Date1>@Date3,@Date1,@Date3),
        IIF(@Date2>@Date3,@Date2,@Date3)) AS MostRecentDate

খুব সুন্দর, কিন্তু নালগুলি হ্যান্ডেল করে না। উদাহরণস্বরূপ:DECLARE @Date1 DATE='2014-08-01'; DECLARE @Date2 DATE=null; DECLARE @Date3 DATE='2014-07-05'; /*this gets returned*/
jumxozizi

আমরা এর মতো select IIF(@Date1 > @Date2 or @Date2 is null, IIF(@Date1 > @Date3 or @Date3 is null, @Date1, @Date3), IIF(@Date2 > @Date3 or @Date3 is null, @Date2, @Date3)) as MostRecentDate
নালগুলি

1

দয়া করে ব্যবহার করার চেষ্টা করুন UNPIVOT:

SELECT MAX(MaxDt) MaxDt
   FROM tbl 
UNPIVOT
   (MaxDt FOR E IN 
      (Date1, Date2, Date3)
)AS unpvt;

1

আমি কেস-এর ভিত্তিতে সমাধানগুলি পছন্দ করি, আমার ধারণাটি হ'ল ক্রস-প্রয়োগ, মান (), কাস্টম ফাংশন ইত্যাদির মতো অন্যান্য সম্ভাব্য সমাধানগুলির তুলনায় সম্ভাব্য পারফরম্যান্স ড্রপের উপর এটির কমপক্ষে প্রভাব হওয়া উচিত should

এখানে কেস-সংস্করণটি দেওয়া হয় যা বেশিরভাগ সম্ভাব্য পরীক্ষার ক্ষেত্রে নাল মানগুলি পরিচালনা করে:

SELECT
    CASE 
        WHEN Date1 > coalesce(Date2,'0001-01-01') AND Date1 > coalesce(Date3,'0001-01-01') THEN Date1 
        WHEN Date2 > coalesce(Date3,'0001-01-01') THEN Date2 
        ELSE Date3
    END AS MostRecentDate
    , *
from 
(values
     (  1, cast('2001-01-01' as Date), cast('2002-01-01' as Date), cast('2003-01-01' as Date))
    ,(  2, cast('2001-01-01' as Date), cast('2003-01-01' as Date), cast('2002-01-01' as Date))
    ,(  3, cast('2002-01-01' as Date), cast('2001-01-01' as Date), cast('2003-01-01' as Date))
    ,(  4, cast('2002-01-01' as Date), cast('2003-01-01' as Date), cast('2001-01-01' as Date))
    ,(  5, cast('2003-01-01' as Date), cast('2001-01-01' as Date), cast('2002-01-01' as Date))
    ,(  6, cast('2003-01-01' as Date), cast('2002-01-01' as Date), cast('2001-01-01' as Date))
    ,( 11, cast(NULL         as Date), cast('2002-01-01' as Date), cast('2003-01-01' as Date))
    ,( 12, cast(NULL         as Date), cast('2003-01-01' as Date), cast('2002-01-01' as Date))
    ,( 13, cast('2003-01-01' as Date), cast(NULL         as Date), cast('2002-01-01' as Date))
    ,( 14, cast('2002-01-01' as Date), cast(NULL         as Date), cast('2003-01-01' as Date))
    ,( 15, cast('2003-01-01' as Date), cast('2002-01-01' as Date), cast(NULL         as Date))
    ,( 16, cast('2002-01-01' as Date), cast('2003-01-01' as Date), cast(NULL         as Date))
    ,( 21, cast('2003-01-01' as Date), cast(NULL         as Date), cast(NULL         as Date))
    ,( 22, cast(NULL         as Date), cast('2003-01-01' as Date), cast(NULL         as Date))
    ,( 23, cast(NULL         as Date), cast(NULL         as Date), cast('2003-01-01' as Date))
    ,( 31, cast(NULL         as Date), cast(NULL         as Date), cast(NULL         as Date))

) as demoValues(id, Date1,Date2,Date3)
order by id
;

এবং ফলাফল:

MostRecent    id   Date1      Date2      Date3
2003-01-01    1    2001-01-01 2002-01-01 2003-01-01
2003-01-01    2    2001-01-01 2003-01-01 2002-01-01
2003-01-01    3    2002-01-01 2001-01-01 2002-01-01
2003-01-01    4    2002-01-01 2003-01-01 2001-01-01
2003-01-01    5    2003-01-01 2001-01-01 2002-01-01
2003-01-01    6    2003-01-01 2002-01-01 2001-01-01
2003-01-01    11   NULL       2002-01-01 2003-01-01
2003-01-01    12   NULL       2003-01-01 2002-01-01
2003-01-01    13   2003-01-01 NULL       2002-01-01
2003-01-01    14   2002-01-01 NULL       2003-01-01
2003-01-01    15   2003-01-01 2002-01-01 NULL
2003-01-01    16   2002-01-01 2003-01-01 NULL
2003-01-01    21   2003-01-01 NULL       NULL
2003-01-01    22   NULL       2003-01-01 NULL
2003-01-01    23   NULL       NULL       2003-01-01
NULL          31   NULL       NULL       NULL

1
ওহ godশ্বর, ধন্যবাদ স্যার! আমি একটি দৈত্য সূত্রের এই হেকটি করতে অনেক সময় ব্যয় করেছি যা এখনও আমাকে শূন্য করেছে এবং এখন আমি টানেলের শেষে আলো দেখতে পাচ্ছি।
সর্বোচ্চ এস

0

আপনি একটি ফাংশন তৈরি করতে পারেন যেখানে আপনি তারিখগুলি পাস করেন এবং তারপরে নীচের মতো নির্বাচনের বিবৃতিতে ফাংশনটি যুক্ত করতে পারেন। সংখ্যা, dbo.fx মোস্ট_ রিসেন্ট_ তারিখ (তারিখ 1, তারিখ 2, তারিখ 3), মূল্য নির্বাচন করুন

create FUNCTION  fxMost_Recent_Date 

(@ তারিখ 1 ছোট তারিখের সময়, @ তারিখ 2 ছোট তারিখের সময়, @ তারিখ 3 ছোট তারিখের সময়) স্মার্টডেটটাইম ফেরত ফিরে আসে ডিসেম্বর থেকে শুরু করুন @ ফলাফল ছোট্ট তারিখের সময়

declare @MostRecent smalldatetime

set @MostRecent='1/1/1900'

if @Date1>@MostRecent begin set @MostRecent=@Date1 end
if @Date2>@MostRecent begin set @MostRecent=@Date2 end
if @Date3>@MostRecent begin set @MostRecent=@Date3 end
RETURN @MostRecent

শেষ


0

স্কটপ্ল্যাচারের http://www.experts-exchange.com/Mic Microsoft / Development / MS - SQL - Server / Q_24204894.html এর সমাধানের ভিত্তিতে আমি সর্বাধিক সন্ধানের জন্য একটি ফাংশন (যেমন getMaxOfDates3, GetMaxOfDates13) এর একটি সেট তৈরি করেছি ইউনিয়ন সমস্ত ব্যবহার করে 13 টি তারিখের মান। একই সারি থেকে সর্বাধিক মান পেতে টি-এসকিউএল ফাংশনটি দেখুন তবে আমি এই ফাংশনগুলি লেখার সময় UNPIVOT সমাধান বিবেচনা করি নি


0

CASE WHEN ব্যবহারের আর একটি উপায়

SELECT CASE true 
       WHEN max(row1) >= max(row2) THEN CASE true WHEN max(row1) >= max(row3) THEN max(row1) ELSE max(row3) end ELSE
       CASE true WHEN max(row2) >= max(row3) THEN max(row2) ELSE max(row3) END END
FROM yourTable

-1

এখানে চিত্র বর্ণনা লিখুনটেবিলের উপরে কর্মচারীর বেতন সারণি যা বেতন 1, বেতন 2, বেতন 3, বেতন 4 কলাম হিসাবে রয়েছে Qu নীচের বিষয়গুলি চারটি কলামের মধ্যে সর্বাধিক মান প্রদান করবে

select  
 (select Max(salval) from( values (max(salary1)),(max(salary2)),(max(salary3)),(max(Salary4)))alias(salval)) as largest_val
 from EmployeeSalary

উপরে ক্যোয়ারী চালানো বৃহত্তম আউটপুট দেবে (10001)

উপরোক্ত প্রশ্নের যুক্তি নীচে হিসাবে রয়েছে:

select Max(salvalue) from(values (10001),(5098),(6070),(7500))alias(salvalue)

আউটপুট হবে 10001


এটি 29 জুলাই '11 -এ @ স্পেন দ্বারা পোস্ট করা সমাধানটির প্রায় অনুলিপি
লুউক

-3

এখানে একটি ভাল সমাধান:

CREATE function [dbo].[inLineMax] (@v1 float,@v2 float,@v3 float,@v4 float)
returns float
as
begin
declare @val float
set @val = 0 
declare @TableVal table
(value float )
insert into @TableVal select @v1
insert into @TableVal select @v2
insert into @TableVal select @v3
insert into @TableVal select @v4

select @val= max(value) from @TableVal

return @val
end 

-3

আমি জানি না এটি এসকিউএল ইত্যাদিতে আছে কিনা ... এম $ অ্যাকসেস সহায়তায় এমন একটি ফাংশন রয়েছে যা MAXA(Value1;Value2;...)এরকম করার কথা।

আশা কাউকে সাহায্য করতে পারে।

পিডি: মানগুলি কলাম বা গণনাযুক্ত ইত্যাদি হতে পারে etc.


1
মাইক্রোসফ্ট অ্যাক্সেস সম্পূর্ণ আলাদা পণ্য। এছাড়াও, আপনি কি এই জাতীয় কোনও ক্রিয়াকলাপের দাবি উত্স করতে সক্ষম? অ্যাক্সেসে আমি এর আগে কখনও দেখিনি বা শুনিনি।
DeutschZuid

1
MAXAঅ্যাক্সেস নয়, একটি এক্সেল ফাংশন
ফেলিক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.