CREATE TABLE tbl( date DATETIME, name VARCHAR(25), price INT);
INSERT INTO tbl VALUES
('2020-01-01', 'laptop', 210),
('2020-01-01', 'pc', 100),
('2020-01-02', 'laptop', 150),
('2020-01-02', 'pc', 200),
('2020-01-03', 'laptop', 150),
('2021-01-01', 'pc', 110),
('2021-01-01', 'laptop', 220),
('2021-01-02', 'pc', 210),
('2021-01-02', 'laptop', 200),
('2021-01-03', 'pc', 260);
SELECT T2.date, T2.name, ( T2.price + T1.price ) / 2
FROM tbl T2
JOIN tbl T1 ON T1.name = T2.name
AND T1.date = LAST_DAY(T2.date - INTERVAL 1 MONTH) + INTERVAL 1 DAY
ORDER BY 1, 2
Первый и второй запрос относятся к одной таблице, но имеют разные условияТогда нужно использовать конструкцию:
SELECT…
FROM R_PERS_ACCOUNT PA1
JOIN R_PERS_ACCOUNT PA2
ON PA2.PA.R_PERS_ACCOUNT_ID = PA1.PA.R_PERS_ACCOUNT_ID
…
WHERE OP1.M_OPERATION_TYPE_ID = 1 AND OP2.M_OPERATION_TYPE_ID = 2
SELECT name
FROM sys.databases
WHERE owner_sid <> 0x01
_UsersWorkHistory
получить дату последнего изменения. Скрипт в помощь.DECLARE @DBD TABLE ( [Name] VARCHAR(100), [Date] DATETIME)
DECLARE @N NVARCHAR(100), @D DATETIME
DECLARE @Q NVARCHAR(100), @P NVARCHAR(100) = '@DD DATETIME OUTPUT'
DECLARE DB CURSOR FOR
SELECT [name]
FROM sys.databases
WHERE owner_sid <> 0x01
OPEN DB
FETCH NEXT FROM DB INTO @N
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Q = 'SELECT @DD = MAX(_Date) FROM ' + @N + '.[dbo].[_UsersWorkHistory]'
BEGIN TRY
EXECUTE sp_executesql @Q, @P, @DD = @D OUTPUT
END TRY
BEGIN CATCH
SET @N = @N + ' Not 1C'
SET @D = NULL
END CATCH
INSERT @DBD VALUES (@N, @D)
FETCH NEXT FROM DB INTO @N
END
CLOSE DB
DEALLOCATE DB
SELECT * FROM @DBD
GO
nvarchar(max)
нельзя включать в индекс. Документация.nvarchar(max)
;URL NVARCHAR(MAX) NOT NULL,
URLIndex AS HASHBYTES('SHA',URL), -- можно добавить в индекс
DECLARE @DBD TABLE ( [Name] VARCHAR(100), [Recovery Model] INT, [Offset] INT)
DECLARE @N NVARCHAR(100), @R INT, @F INT
DECLARE @Q NVARCHAR(100), @P NVARCHAR(100) = '@FF INT OUTPUT'
DECLARE DB CURSOR FOR
SELECT [name], [recovery_model]
FROM sys.databases
WHERE owner_sid <> 0x01
OPEN DB
FETCH NEXT FROM DB INTO @N, @R
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Q = 'SELECT @FF = Offset FROM ' + @N + '.[dbo].[_YearOffset]'
BEGIN TRY
EXECUTE sp_executesql @Q, @P, @FF = @F OUTPUT
END TRY
BEGIN CATCH
SET @N = @N + ' Not 1C'
SET @F = NULL
END CATCH
INSERT @DBD VALUES (@N, @R, @F)
FETCH NEXT FROM DB INTO @N, @R
END
CLOSE DB
DEALLOCATE DB
SELECT * FROM @DBD
GO