ShivAkshay Ответов: 2

Получить строку максимального значения из таблицы SQL


I am writing code for one of project. So for so good. Now I struck up to get particular row which the value is maximum from column OeRT. Below is my table, this is one shift data entered on 5th Aug. When I query with OeDate, OeShift & OeLoct, I am getting this table in DataSet Visualizer. But I want the row which is maximum value which recorded in OeRT column. In this case I want only row number 800053, which is recorded OeRT value 131

.

Что я уже пробовал:

Я пишу код для одного из проектов. Так что все к лучшему. Теперь я ударил, чтобы получить конкретную строку, значение которой является максимальным из столбца OeRT. Ниже приведена моя таблица, это данные одной смены, введенные 5 августа. Когда я делаю запрос с помощью OeDate, OeShift &OeLoct,я получаю эту таблицу в визуализаторе набора данных. Но мне нужна строка, которая является максимальным значением, записанным в столбце OeRT. В этом случае мне нужна только строка с номером 800053, в которой записано значение OeRT 131. Pl, помогите мне получить только тот, который содержит максимальное значение в OeRT. Моя хранимая процедура также введена ниже.


OeID OeDate OeShift OeLoct OePOT OeSPT OeUPT OeRT
800052 05-08-2016 12: 00: 00 Shift_A 4 480 425 212 53
800053 05-08-2016 12: 00: 00 Shift_A 4 480 425 212 131
800054 05-08-2016 12: 00: 00 Shift_A 4 480 425 212 123
800055 05-08-2016 12: 00: 00 Shift_A 4 480 425 212 108
800056 05-08-2016 12: 00: 00 Shift_A 4 480 425 212 123


хранимая процедура
ИСПОЛЬЗУЙТЕ [TPM]
ГО
/ * * * * * * Объект: StoredProcedure [dbo].[sp_OeeEntryDisplay] Дата сценария: 25.08.2016 3: 15: 33 PM ******/
УСТАНОВИТЕ ANSI_NULLS ON
ГО
УСТАНОВИТЕ QUOTED_IDENTIFIER НА
ГО
ALTER proc [dbo].[sp_OeeEntryDisplay]
@второй тип nvarchar(Макс)
как
начать
declare @statement varchar (max);
set @statement = ' select OeID, OeDate,OeShift,OeLoct,OePOT,OeSPT,OeUPT, OeRT,
из TPM_OeeEntry

где 1=1' + @sCond

инструкция EXECUTE);
конец

2 Ответов

Рейтинг:
1

The Praveen Singh

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

ALTER proc [dbo].[sp_OeeEntryDisplay]
AS
Create Table #Temp
(
SN           int Identity,
OeID         varchar(50),
OeDate       Datetime,  
OeShift      varchar(50),
OeLoct       varchar(50),
OePOT        varchar(50),
OeSPT        varchar(50),
OeUPT        varchar(50),
OeRT         varchar(50),
)
Insert into #temp(OeID,OeDate,OeShift,OeLoct,OePOT,OeSPT,OeUPT ,OeRT                                 )
select OeID,OeDate,OeShift,OeLoct,OePOT,OeSPT,OeUPT,OeRT,
from TPM_OeeEntry order by  OeRT desc

select TOP 1 * from #temp;
Drop table #temp;


Надеюсь, это решит вашу проблему.


Рейтинг:
0

The Praveen Singh

вы также можете использовать для этого общее табличное выражение следующим образом:-

WITH T AS
(
SELECT *,
       DENSE_RANK() OVER (ORDER BY OeRT Desc) AS Rnk
FROM TPM_OeeEntry
)
SELECT *
FROM T
WHERE Rnk=1;


ShivAkshay

При этом я получаю только одну строку максимального значения в столбце OeRT, которая записала максимальное значение в одном из сдвигов. Но я хочу, чтобы каждый сдвиг имел максимальное значение OeRT. Поэтому я запрашиваю данные каждой смены с параметром даты, сдвига, местоположения. Если удовлетворяет всем этим 3 параметрам, то я получаю некоторый набор строк, из этих строк мне нужно максимальное значение из столбца OeRT.

в моей хранимой процедуре параметры находятся в @sCond. см. мою хранимую процедуру в моем предыдущем вопросе.

Создание параметра, как показано ниже в моем проекте c#.
строка sCond = "и OeLoct=" + cboSector.SelectedValue;
sCond = sCond + " и OeShift='" + cboShftVew.Текст + "'";
второй = второй + " и Convert(DateTime и OeDate,105)&ГТ;=конвертировать(типа datetime,'" + OeeDate + "',105)";

The Praveen Singh

используйте group by с oeShift.