Архив метки: sql

SQL запрос Oracle поиска дубликатов по нескольким полям

sql Oracle поиск дубликатов

SQL запрос Oracle поиск дубликата записей по нескольким полям, можно использовать комбинацию функций GROUP BY и HAVING. Вот пример запроса:

SELECT field1, field2, field3, COUNT(*) AS count
FROM your_table
GROUP BY field1, field2, field3
HAVING COUNT(*) > 1;

В этом sql запросе вы должны заменить «your_table» на имя вашей таблицы, а «field1», «field2» и «field3» на имена полей, по которым вы хотите найти дубликаты.

Вы получите результат, в котором будут показаны значения полей и количество повторений. Только те записи, в которых количество повторений больше 1, будут включены в результат.

Через партиции

Для поиска дубликатов в Oracle можно использовать анализ партиций таблицы. Вот пример sql запроса, который может помочь вам найти дубликаты внутри партиций таблицы:

SELECT column1, column2, ..., columnN
FROM (
    SELECT column1, column2, ..., columnN,
        COUNT(*) OVER (PARTITION BY column1, column2, ..., columnN) AS duplicate_count
    FROM your_table
    )
WHERE duplicate_count > 1;

Замените your_table на имя вашей таблицы, а column1, column2, …, columnN на столбцы, по которым вы хотите искать дубликаты. Результатом будет список строк, содержащих дубликаты исходных данных.

Обратите внимание, что этот запрос проверяет дубликаты только в рамках партиций таблицы. Если вы хотите проверить все строки таблицы на дубликаты, вам нужно будет удалить часть (PARTITION BY column1, column2, ..., columnN).

MS SQL Импорт данных из внешнего файла

SQL Запрос на изменение данных UPDATEНеобходимо выбрать определенные данные из файла XLS, и загрузить в базу данных MS SQL.

Код как выбрать ниже, а добавление идет стандартно через «INSERT»

Для этого можно использовать «команду» opendatasource :

SELECT COD
     , PR
FROM
  opendatasource('MICROSOFT.ACE.OLEDB.12.0', 'Data Source="C:\C95.xls";Extended properties=Excel 8.0')...[Лист1$] AS tbl
WHERE PR<1000

Соответственно необходимо явно указать название столбцов COD и PR в файле XLS. К примеру как на картинке

XLS_PRICE

В первый раз может не получится это запустить. Необходимо выполнить это
1

"EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

2

USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO

MS SQL выборка по максимальной дате

Letter_Ru_phpНеобходимо сделать выборку из таблицы по максимальной дате каждого поля.

 

Допустим есть таблица ARTDATA

Id Name DATAVAL

1  A       01.01.2015
2  A       02.01.2015
3  B       01.01.2015

SELECT *
FROM
ARTDATA AS [data]
WHERE
DATAVAL = (SELECT max(DATAVAL)
FROM
ARTDATA
WHERE
Name = [data].Name)

Результат

2  A       02.01.2015
3  B       01.01.2015

Приведенный выше полностью рабочий пример, не единственное решение. Можно также сделать данную выборку по дате с помощью LEFTJOIN

 

 

Запрос SQL для добавления записи в БД

Запрос SQL для добавления записи в таблицу БД.

Общий вид  запроса

INSERT INTO имя таблицы (поле1, поле2) VALUES (‘данные поля1’,’данные поля2’)
или
INSERT INTO имя таблицы SET поле1=‘данные поля1’, поле2=’данные поля2’

Пример запроса

INSERT INTO fruit (Name, color) VALUES (‘apple’,’green’);

Рабочий пример листинга использования запроса на добавления (MySql + php.)

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя
$password = ""; // пароль пользователя (если пароль отсутствует, этот параметр можно оставить пустым)
$dbName = "test"; // название базы данных
 /* Таблица MySQL, в которой хранятся данные */
$table = "test_table";
 /* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");
/* Корректный вывод русских букв */
mysql_query('SET NAMES cp1251') or header('Location: Error');
/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());
/* Запрос на добавление */
  $query = "INSERT INTO
   	     $table
	    SET
	     dolzhnost='$dolz',
	     inn='$inn',
	     fullnameorg='$fname',
	     fio='$fioname',
	     date='$cdate',
	     yuradres='$yuradress',
	     factadres='$fadress'
  	   ";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die(mysql_error());
/* В случае успешного сохранения выводим сообщение и ссылку возврата */
echo ("<div style=\"text-align: center; margin-top: 10px;\">
<font color=\"green\">Данные успешно отправлены!</font>
<a href=\"index.php\">Вернуться назад</a></div>");
header("Location: /eoz/index.php");
        exit;
};
/* Закрываем соединение */
mysql_close();)

Также можно посмотреть:

Пример запроса SQL на обновления поля в таблице БД

Очистка больших файлов логов ldf в MsSQL

mssql_expressПроблема:

Слишком большой файл логов транзакций, например srvcalog.ldf — почти 30 ГБ. Его надо очистить, уменьшить размер.

Решение

Решением является штатная процедура чистки логов — в MS SQL Server Management Studio Express создаем новый запрос к требуемой базе. И там прописать следующий код скрипта

BACKUP LOG [имя вашей базы] WITH TRUNCATE_ONLY
DBCC SHRINKFILE(2, TRUNCATEONLY)

выполняем.

В моем случае файл логов занимал 30ГБ, после выполнения запроса 1Мб.