【Snowflake】「SELECT TOP 1」と「ORDER BY ... LIMIT 1」の違いについて
SELECT TOP 1とORDER BY ... LIMIT 1の違いは、主に以下の2点がある。
1. 標準SQLとの互換性
SELECT TOP 1:- SQL ServerやSybaseなど、一部のデータベースで使われる構文。
- Snowflakeでも
SELECT TOP 1は使用可能だが、SQLの標準仕様ではない。
ORDER BY ... LIMIT 1:- こちらはSQL標準に準拠した構文で、MySQLやPostgreSQL、Snowflakeなど多くのデータベースでサポートされている。
2. 可搬性(ポータビリティ)
SELECT TOP 1:- データベース間で移植する際に、他のデータベースがこの構文をサポートしていない場合、エラーが発生する可能性がある。
- SQL Serverなどの特定のDBMSでの使用が主。
ORDER BY ... LIMIT 1:
どちらを使うべきか?
- Snowflakeを含む他の多くのデータベースに対して移植性を考える場合や、標準に準拠した書き方をしたい場合は、
ORDER BY ... LIMIT 1を使うのが良い。 - もし、SQL Serverのように
TOP句に慣れている場合や、特定の理由でTOP句を使いたい場合は、SELECT TOP 1を選んでも問題ない。 ただし、その際は移植性を考慮する必要がある。
結論として、特に理由がないのであればORDER BY ... LIMIT 1を使用すべきである。
【Snowflake】1~52週までの繰り返しレコードの取得
WITH target_date AS ( SELECT TO_DATE('20230128', 'YYYYMMDD') AS pnr_date ), date_ranges AS ( SELECT pnr_date, DATEADD('DAY', 1 - DAYOFWEEK(pnr_date), pnr_date) AS previous_saturday FROM target_date ), weeks AS ( SELECT previous_saturday, DATEADD('WEEK', SEQ4(), previous_saturday) AS week_start FROM date_ranges, TABLE(GENERATOR(ROWCOUNT => 52)) ), formatted_dates AS ( SELECT TO_CHAR(DATE_TRUNC('WEEK', week_start + INTERVAL '1 DAY'), 'YYYY-WW') AS 作成日, TO_CHAR(week_start, 'YYYYMMDD') AS 対象日_PNR, TO_CHAR(DATE_TRUNC('WEEK', week_start + INTERVAL '1 DAY') + INTERVAL '1 DAY', 'YYYYMMDD') AS 対象日_作成日, '(' || TO_CHAR(DATE_TRUNC('WEEK', week_start + INTERVAL '1 DAY'), 'MM') || '月-' || TO_CHAR(DATE_TRUNC('WEEK', week_start + INTERVAL '1 DAY'), 'W') || ')' AS 作成日名_単月, TO_CHAR(DATE_TRUNC('WEEK', week_start + INTERVAL '1 DAY'), 'YYYY-WW') || '(' || TO_CHAR(DATE_TRUNC('WEEK', week_start + INTERVAL '1 DAY'), 'MM') || '月-' || TO_CHAR(DATE_TRUNC('WEEK', week_start + INTERVAL '1 DAY'), 'W') || ')' AS 作成日名_通年 FROM weeks ) SELECT 作成日, 対象日_PNR, 対象日_作成日, 作成日名_単月, 作成日名_通年 FROM formatted_dates ORDER BY 作成日;
【bat】リストを使用してファイルを移動
コードは以下の通り。
@echo off set "sourceFolder=C:\元のフォルダのパス" set "destinationList=C:\移動先のファイル・パスのリスト.txt" if exist "%destinationList%" ( for %%a in ("%sourceFolder%\*.*") do ( set "fileName=%%~nxa" set "destinationPath=" rem 指定したファイル名に一致する行を検索し、パスを取得 for /f "usebackq tokens=1,* delims=," %%b in ("%destinationList%") do ( if /i "%%b"=="%fileName%" ( set "destinationPath=%%c" goto MoveFile ) ) echo ファイル "!fileName!" の移動先が見つかりませんでした。 goto ContinueLoop :MoveFile move "%sourceFolder%\!fileName!" "%destinationPath%\" echo ファイル "!fileName!" が "!destinationPath!" に移動されました. :ContinueLoop ) ) else ( echo 移動先のファイル・パスのリストが見つかりませんでした。 ) pause
【VBA】複数のHTMLファイルを一括でExcelに変換
コードは以下の通り。
Sub ConvertHTMLtoExcel() Dim FolderPath As String Dim HTMLFile As String Dim ExcelApp As Object Dim wb As Object ' 変換元のHTMLファイルが格納されているフォルダのパスを指定します FolderPath = "C:\Your\Folder\Path\" ' パスを適切に変更してください ' Excelアプリケーションを起動します Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True ' Excelを表示する場合はTrue、非表示にする場合はFalse ' 指定されたフォルダ内のすべてのHTMLファイルに対して処理を行います HTMLFile = Dir(FolderPath & "*.html") Do While HTMLFile <> "" ' 新しいワークブックを作成します Set wb = ExcelApp.Workbooks.Add ' HTMLファイルを開いてデータを取り込みます With wb.Worksheets(1).QueryTables.Add(Connection:="TEXT;" & FolderPath & HTMLFile, Destination:=Range("A1")) .TextFileParseType = xlDelimited .TextFileOtherDelimiter = "" .Refresh BackgroundQuery:=False End With ' Excelファイルとして保存します wb.SaveAs FolderPath & Left(HTMLFile, Len(HTMLFile) - 4) & ".xlsx", FileFormat:=51 ' xlsx形式で保存 wb.Close False ' ワークブックを閉じます ' 次のHTMLファイルに移動します HTMLFile = Dir Loop ' Excelアプリケーションを終了します ExcelApp.Quit Set ExcelApp = Nothing End Sub