Как получить уникальные значения построчно - SQL Server

Этот запрос должен быть написан перед запросом, который создает или обновляет данные в базе данных, этот запрос выглядит так:

mysql_query("set names 'utf8'");

Обратите внимание, что вы должны написать кодировку, которую вы используете в заголовке для Например, если вы используете utf-8, вы добавляете его так же, как в заголовке, или это вызовет проблему с Internet Explorer

, чтобы ваша страница выглядела как

<html>
    <head>
        <title>page title</title>
        <meta charset="UTF-8" />   
    </head>
    <body>
    <?php
            mysql_query("set names 'utf8'");   
            $sql = "INSERT * FROM ..... ";  
            mysql_query($sql);
    ?>    

    </body>
<html>
0
задан Jose Felipe Blum de Araujo 18 January 2019 в 13:12
поделиться

5 ответов

Я думаю, вы можете использовать этот код. Сначала вы создаете CTE с группой по. После этого вы рассчитываете разницу:

USE YourDB;
WITH Cte AS 
(
     SELECT Sct.Systemunittrid AS Id_Sut,
            Sct1.Systemunittrid AS Id_Sut1,
            MIN(Sct.Modifieddatetime) AS Sut,
            MAX(Sct1.Modifieddatetime) AS Sut1
     FROM Systemunittransactions AS Sct
       LEFT JOIN Systemunittransactions AS Sct1 ON Sct1.Servicetag = Sct.Servicetag
     WHERE Sct.Servicetag = 'IDXXX12'
           AND Sct1.Servicetag = 'IDXX12'
           AND Sct.Statustype = 'STATUS_1'
           AND Sct1.Statustype = 'STATUS_1'
           AND Sct.Systemunittrid != Sct1.Systemunittrid
     GROUP BY Sct.Systemunittrid,
              Sct1.Systemunittrid 
)

SELECT *, DATEDIFF(minute, Sct.Modifieddatetime, Sct1.Modifieddatetime) AS Diff
FROM Cte;
0
ответ дан SQL_M 18 January 2019 в 13:12
поделиться

Что-то не так с вашим примером: вы присоединяетесь к сервисному тегу

Systemunittransactions AS Sct
       LEFT JOIN Systemunittransactions AS Sct1 ON Sct1.Servicetag = Sct.Servicetag

, но после этого вы фильтруете по двум разным тегам в каждой таблице:

Sct.Servicetag = 'IDXXX12' AND Sct1.Servicetag = 'IDXX12',

еще один Х, чем другой. Это объединение с этим фильтром никогда не будет работать. Предполагая, что в вопросе содержится ошибка пропущенной буквы, и приведенный вами пример таблицы, в котором не более одной строки с одной и той же парой идентификаторов, ищет запрос:

[112 ]
0
ответ дан nicoflecap1 18 January 2019 в 13:12
поделиться

Если вы используете SQL Server 2012 или новее, вы можете просто использовать функции LAG или LEAD в зависимости от того, что вам нужно

select distinct
    SystemUnitTRID as id_sut,
    lead(SystemUnitTRID) over (order by systemunittrid) as id_sut1,
    ModifiedDateTime as sut,
    lead(ModifiedDateTime) over (order by systemunittrid) as sut1,
    DATEDIFF(minute, lead(ModifiedDateTime) over (order by systemunittrid), ModifiedDateTime) as diff
from 
    systemunittransactions sct
where 
    servicetag = 'IDXXX12'
and statustype = 'STATUS_1'
order by 
    SystemUnitTRID
0
ответ дан iamdave 18 January 2019 в 13:12
поделиться

Попробуйте это: - select * from(select sct.SystemUnitTRID as id_sut, sct1.SystemUnitTRID as id_sut1, sct.ModifiedDateTime as sut, sct1.ModifiedDateTime as sut1, DATEDIFF(minute, sct.ModifiedDateTime, sct1.ModifiedDateTime) as diff, ROW_NUMBER() over(partition by sct.SystemUnitTRID order by sct.SystemUnitTRID) as rownum from systemunittransactions sct left join SystemUnitTransactions sct1 on sct1.ServiceTag = sct.ServiceTag where sct.servicetag = 'IDXXX12'and sct1.ServiceTag = 'IDXX12' and sct.StatusType = 'STATUS_1'and sct1.StatusType = 'STATUS_1'and sct.SystemUnitTRID != sct1.SystemUnitTRID)t where rownum=1

0
ответ дан maddy 18 January 2019 в 13:12
поделиться

Если вы не можете использовать lag и lead для других ответов здесь, вы можете добиться того же эффекта, создав row_number с ServiceTag как partition и отсортировав его по [ 117] вы можете join данные для себя через ServiceTag и row_number, чтобы получить ваши периоды между каждой строкой. Вы заметите, что это работает для нескольких значений ServiceTag:

declare @t table(ServiceTag varchar(20), StatusType varchar(20), SystemUnitTRID int, ModifiedDateTime datetime);
insert into @t values
 ('IDXXX12','STATUS_1',145818840,'2019/01/18 08:35:27')
,('IDXXX12','STATUS_1',145820934,'2019/01/18 08:50:41')
,('IDXXX12','STATUS_1',145822116,'2019/01/18 08:59:18')
,('IDXXX12','STATUS_1',145825658,'2019/01/18 09:23:23')
,('IDXXX12','STATUS_1',145826849,'2019/01/18 09:30:55')
,('IDXXX13','STATUS_1',245818840,'2019/01/17 18:35:00')
,('IDXXX13','STATUS_1',245820934,'2019/01/17 18:50:00')
,('IDXXX13','STATUS_1',245822116,'2019/01/17 18:59:00')
,('IDXXX13','STATUS_1',245825658,'2019/01/17 19:23:00')
,('IDXXX13','STATUS_1',245826849,'2019/01/17 21:30:00')
,('IDXXX14','STATUS_2',345818840,'2019/01/16 18:35:00')
,('IDXXX14','STATUS_2',345820934,'2019/01/16 18:50:00')
,('IDXXX14','STATUS_2',345822116,'2019/01/16 18:59:00')
,('IDXXX14','STATUS_2',345825658,'2019/01/16 19:23:00')
,('IDXXX14','STATUS_2',345826849,'2019/01/16 19:30:00')
;

with d as
(
    select ServiceTag
            ,StatusType
            ,SystemUnitTRID
            ,ModifiedDateTime
            ,row_number() over (partition by ServiceTag order by ModifiedDateTime) as rn
    from @t
    where StatusType = 'STATUS_1'
)
select d.ServiceTag
    ,d.SystemUnitTRID as id_sut
    ,d2.SystemUnitTRID as id_sut1
    ,d.ModifiedDateTime as sut
    ,d2.ModifiedDateTime as sut1
    ,datediff(minute,d.ModifiedDateTime,d2.ModifiedDateTime) as MinuteBoundaries    -- Returns the number of minute boundaries crossed
    ,datediff(second,d.ModifiedDateTime,d2.ModifiedDateTime)/60 as WholeMinutes -- Returns the number of whole minutes
    ,right('00' + cast(datediff(second,d.ModifiedDateTime,d2.ModifiedDateTime)/60/60 as varchar(10)),2)
        + ':'
        + right('00' + cast(datediff(second,d.ModifiedDateTime,d2.ModifiedDateTime)/60%60 as varchar(10)),2) as FormattedTime
from d
    join d as d2
        on d.ServiceTag = d2.ServiceTag
            and d.rn = d2.rn-1
order by d.ServiceTag
        ,d.ModifiedDateTime;

Вывод

+------------+-----------+-----------+-------------------------+-------------------------+------------------+--------------+---------------+
| ServiceTag |  id_sut   |  id_sut1  |           sut           |          sut1           | MinuteBoundaries | WholeMinutes | FormattedTime |
+------------+-----------+-----------+-------------------------+-------------------------+------------------+--------------+---------------+
| IDXXX12    | 145818840 | 145820934 | 2019-01-18 08:35:27.000 | 2019-01-18 08:50:41.000 |               15 |           15 | 00:15         |
| IDXXX12    | 145820934 | 145822116 | 2019-01-18 08:50:41.000 | 2019-01-18 08:59:18.000 |                9 |            8 | 00:08         |
| IDXXX12    | 145822116 | 145825658 | 2019-01-18 08:59:18.000 | 2019-01-18 09:23:23.000 |               24 |           24 | 00:24         |
| IDXXX12    | 145825658 | 145826849 | 2019-01-18 09:23:23.000 | 2019-01-18 09:30:55.000 |                7 |            7 | 00:07         |
| IDXXX13    | 245818840 | 245820934 | 2019-01-17 18:35:00.000 | 2019-01-17 18:50:00.000 |               15 |           15 | 00:15         |
| IDXXX13    | 245820934 | 245822116 | 2019-01-17 18:50:00.000 | 2019-01-17 18:59:00.000 |                9 |            9 | 00:09         |
| IDXXX13    | 245822116 | 245825658 | 2019-01-17 18:59:00.000 | 2019-01-17 19:23:00.000 |               24 |           24 | 00:24         |
| IDXXX13    | 245825658 | 245826849 | 2019-01-17 19:23:00.000 | 2019-01-17 21:30:00.000 |              127 |          127 | 02:07         |
+------------+-----------+-----------+-------------------------+-------------------------+------------------+--------------+---------------+
0
ответ дан iamdave 18 January 2019 в 13:12
поделиться
Другие вопросы по тегам:

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